首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绕过Gmail的垃圾邮件过滤器(从共享主机用PHP发送的邮件)

绕过Gmail的垃圾邮件过滤器(从共享主机用PHP发送的邮件)
EN

Stack Overflow用户
提问于 2013-03-07 14:46:16
回答 5查看 16.4K关注 0票数 16

TL;DR:从共享主机发送的邮件(例如来自Unoeuro One.com的廉价域名)最终会变成垃圾邮件。怎么修?

我制作了一个邮件系统,它首先生成一个PDF文件(使用FPDF),然后它将PDF文件作为附件发送给PHP。这封电子邮件发送给130个人(作为“一张发票”)。但对于几乎每个人来说,它都是垃圾邮件过滤器。我试着调整SwiftMailers头-设置,但没有任何运气。甚至是我以前没有发过的邮件(经过了彻底的测试)。这是我最初的设计:

代码语言:javascript
运行
复制
function sendMailEt($toEmail, $toName, $invoiceNumber){

require_once('includes/lib/swift_required.php');

$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25)
  ->setUsername('EMAIL-ACCOUNT1@THE-DOMAIN.DK')
  ->setPassword('THE-PASSWORD')
  ;    

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('FROM COMPANY')
      ->setSubject('Thanks for signing up - COMPANY')
  ->setFrom(array('EMAIL-ACCOUNT1@THE-DOMAIN.DK' => 'Company name'))
  ->setTo(array($toEmail => $toName))
      ->setBody('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)')
      ->addPart('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)', 'text/html')

   ->attach(Swift_Attachment::fromPath('/URL-TO-THE-PDF-FILE.pdf'))
  ;

$result = $mailer->send($message);
}

我还试着用PHP的本地mail()-function发送电子邮件,然后简单地链接到发票( http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf ).同样的结果(垃圾邮件)。

我试着自己写整个标题。我读过很多关于标题应该包括什么的论坛,但是他们都写了不同的东西。所以我尝试了一些不同的东西(我以前发过的邮件和我没有发过的电子邮件).同样的结果(垃圾邮件)。

然后,我试着像MailChimps一样在他们的头上写标题。这让我想到了这个:

代码语言:javascript
运行
复制
 $headers = "Reply-To: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "Return-Path: Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "From: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n"; 
 $headers .= "MIME-Version: 1.0\r\n";
 $headers .= "Sender: Message from Company name <UNUSED-EMAIL-ACCOUNT-FROM-DOMAIN@DOMAIN-NAME.DK>\r\n";
 $headers .= "Content-type: text/plain; charset=\"utf-8\"; \r\n";
 $headers .= "X-Mailer: PHP". phpversion() ."\r\n";

然后我像这样发送邮件:

代码语言:javascript
运行
复制
mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);

..。同样的结果(垃圾邮件)。

has空间与One.com一起使用,所以我不能使用PHPmailer (因为必须安装它,而这不能在one.com的服务器上完成)。我也不能用One.com来定义防晒系数。

我所想要的就是能够发送不属于垃圾邮件的电子邮件。

以下是我的问题:

  1. 是因为我的头被关闭了,还是因为“更深的层次”?
  2. Gmail-垃圾邮件过滤器是禁止单个电子邮件帐户(如this@example.com)还是禁止整个域(如@example.com)?
  3. 你能以某种方式得到一封被列入黑名单的电子邮件吗?

*加法1 *

好的..。我现在已经尝试了很多东西:

  • 我试着添加LoneWolfPR的返回路径,就像推荐的那样,但没有帮助。
  • 我联系了One.com (托管公司),并与他们确认,它是不可能设置一个SPF-记录或DKIM-记录。现在仍然不是。
  • 我考虑建立一个“取消订阅”链接,链接到一个有表单的网站,但我不相信这种方法。我的意思是-发票一直都是用电子邮件发送的。你为什么要取消发票呢?!因为这在我的头脑中是完全不合理的,所以我只试了20分钟(显然,没有结果)。

以下是我当前的电子邮件标题(通过单击“查看原件”从Gmail获得):

代码语言:javascript
运行
复制
Delivered-To: NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com
Received: by 10.76.75.104 with SMTP id b8csp48728oaw;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
X-Received: by 10.152.116.45 with SMTP id jt13mr7897860lab.0.1363480376067;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
Return-Path: <XXX111@DOMAIN-NAME.dk>
Received: from mail-out2.b-one.net (mail-out2.one.com. [91.198.169.19])
        by mx.google.com with ESMTP id p10si4637427lbb.120.2013.03.16.17.32.55;
        Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Received-SPF: neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) client-ip=91.198.169.19;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of XXX111@DOMAIN-NAME.dk) smtp.mail=XXX111@DOMAIN-NAME.dk
Date: Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING@mx.google.com>
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
    by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
    for <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
Received: from 85.218.159.219 by www.DOMAIN-NAME.dk via URL_TO_THE_SCRIPT.php with HTTP; Sun, 17 Mar 2013 00:32:53 +0000
To: RECIEVERS_NAME <NEWLY-CREATED-GMAIL-ACCOUNT@gmail.com>
Subject: EMAIL-SUBJECT
X-PHP-Originating-Script: 87486:NAME-OF-THE-SCRIPT-THE-E-MAIL-WAS-SENT-FROM.php
Reply-To: COMPANY NAME <XXX111@DOMAIN-NAME.dk>
From: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
MIME-Version: 1.0
Sender: Besked fra COMPANY NAME <XXX111@DOMAIN-NAME.dk>
Content-type: text/plain; charset="utf-8"; 
X-Mailer: PHP5.3.21
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-29 09:30:08

解决方案:使用梅尔贡 (未测试)或Sendgrid (测试和工作奇迹!)。两者之间有一个价差,但简而言之:如果你是小的,Mailgun是好的;如果你是大的,Sendgrid是好的。

或者用MailChimps API之类的方式发送邮件。它不能固定在共享主机上(很可能)。原因如下。

解释:,我后来了解了更多关于共享主机工作方式的信息。假设几个不同的站点位于同一个服务器上(如domain-1.orgdomain-2.orgdomain-3.org)。这意味着如果domain-3.org发送了一堆垃圾邮件,那么Gmail (和其他垃圾邮件过滤器)就会将该IP地址标记为垃圾邮件。因此,如果domain-2.org然后发送东西,那么(很可能)会来自某个IP地址,从而导致垃圾邮件。共享主机不能对此做任何事情(而且也不在乎,因为很少有人有这个问题)。这就是为什么它这么便宜。

Sendgrid和邮箱的IP地址被所有的垃圾邮件过滤器标记为“好”,这就是你用它们支付的服务。通过监控你发出去的电子邮件中有多少封邮件被标记为“垃圾邮件”,他们就会保持这种状态。如果是5%-10%,或者是低得离谱的东西,那么Sendgrid/Mailgun会阻塞你的帐户,直到你修复它(经过一个漫长的过程,你必须联系他们的客户服务,做1.000万岁玛丽和各种各样的事情)。

我听说,如果您有自己的服务器(这要贵得多),并设置您自己的邮件服务器,那么您必须非常小心,不要被标记为垃圾邮件。因为垃圾邮件过滤现在真的很难.

票数 2
EN

Stack Overflow用户

发布于 2013-03-11 15:05:59

( 1)通常,电子邮件地址不会轻易进入黑名单,要把你贴上垃圾邮件发送者标签需要时间和/或很多人,才能将该地址真正列入黑名单。

2)是。一个完整的域名可以被列入黑名单,因为垃圾邮件发送者通常会生成像f4j3ifl@something.com这样的随机电子邮件地址。

( 3)垃圾邮件被垃圾邮件过滤多少次并不重要,基本上,垃圾邮件过滤器现在是很强的,因为垃圾邮件发送者每天都在努力改进他们的生活方式,所以垃圾邮件过滤器每天都变得越来越严格。如果它第一次进入垃圾邮件文件夹,而用户并没有实际将其放入垃圾邮件框中,它将继续运行,除非用户取消标记,否则您将修复问题。

如何避免垃圾邮件箱?

基本上,您需要一些签名和对DNS记录的大量访问,因为我们将在那里完成大部分设置。

  • 反向DNS查找:在专用服务器上,甚至在某些VPS上,您可以设置反向dns记录,有时您只需打开票证,it就会为您设置它。如果你不能拥有它,改变你的主机或继续被标记为垃圾邮件xD。这是预防头伪造,因为您可以设置您的邮件来自gmail.com的邮件头,但这不是电子邮件服务器检查它的方式。
  • SPF是一个必须拥有的,如果您不能设置SPF,那么甚至不要再尝试,考虑更改您的主机,您可以在这里几乎停止阅读xD。
  • DKIM /域密钥:最好是DKIM加密签名,您可以在DNS上设置公钥,并将私钥存储在您的电子邮件服务器中,当服务器接收到电子邮件时,它会将私钥附加到标头中(您需要一个管理DKIM的邮件服务器软件,例如,它对windows起作用),邮件服务(例如,gmail)将检查您的dns记录是否与公钥匹配。这几乎是我必须拥有的

这三个是最基本的,如果您设置DMARC和ADSP,它将使您在SpamAssassins上获得更好的分数。为了更好地搜索谷歌上的垃圾邮件关键词列表,并尽量避免,一些东西,比如用"Dear xxx“开始发电子邮件,对你的分数有害,建立一个不受约束的系统(即使它很糟糕,只要你提供一个清晰的链接)也会对你有所帮助。

另外:

  • 避免草率的html和白色文本的(任何)背景,一些垃圾邮件发送者使用它来适应隐藏的文本,这些过滤器比你想象的更聪明。
  • 阅读具体建议。大多数电子邮件服务在他们的网站上都有一个常见问题或什么东西,有一些提示可以帮助你发送电子邮件,而不是进入垃圾邮件。在其中一些服务中,你甚至可以申请进入白名单(至少几年前,在gmail这样的服务中,他们不再这样做了)
  • 如果你是成批发送,注意时间!如果你每秒发送X封电子邮件到某个地方,你很可能会进入黑名单,设置一个脚本或什么东西来延迟1秒左右,延迟可能取决于是否进入黑名单的命运。

希望这些提示能帮助你,我最近不得不处理一些垃圾邮件过滤器,这是我知道所有这些信息的原因,这就是我所有的研究xD,即使在我设置了所有的签名和东西之后,一些电子邮件仍然会进入垃圾邮件箱(一个较小的百分比,但它仍然伤害到我),唯一可靠的方法是让用户将你添加到联系人列表中(同时正确地拥有签名和标题),所以如果可能的话,提醒他们这样做。

票数 15
EN

Stack Overflow用户

发布于 2013-03-14 18:54:28

有一件事要记住,我有麻烦的电子邮件被屏蔽Gmail和雅虎!来自php的邮件,因为返回路径头与from不匹配。在很多服务器上,如果您显式地设置了报头中的返回路径,PHP将忽略这一点,并将返回路径设置为计算机名。您必须使用'-f‘标志将其强制到邮件函数的“附加参数”部分。现在我从未使用过Swift,所以我不知道PHP的本地mail()函数的等效性,但是下面是使用mail()的样子;

代码语言:javascript
运行
复制
mail($to,$subject,$message,$headers,'-f returnpath@example.com')

如果您能够在快速邮件中找到与此等价的内容,它可能会解决您的问题。

编辑:

看起来你根本没有设置返回路径。我知道GMail真的不喜欢被排除在外。尝试将其显式设置为您的Swift_Mailer消息(并确保它与From匹配):

代码语言:javascript
运行
复制
$message->setReturnPath('from@example.com');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15274157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档