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

2022-08-31 01:06:01

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


我做了一个邮件系统,首先生成一个PDF文件(使用FPDF),然后它用PHP的Swiftmailer将PDF文件作为附件发送。这封电子邮件已发送给130人(作为“one-of”发票)。但它几乎落入了每个人的垃圾邮件过滤器。我尝试调整 SwiftMailers 标头设置,但没有运气。甚至是我以前没有发送过的邮件(经过全面测试)。这是我的初始设置:

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()http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf

我试着自己写整个标题。我读过很多关于标题应该包含哪些内容的论坛,但它们都写了不同的东西。所以我尝试了几种不同的方法(我以前发送的电子邮件和我没有发送的电子邮件)......相同的结果(垃圾邮件)。

然后,我尝试像MailChimps一样在他们的标题中编写标题。这让我想到了这一点:

 $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";

然后我像这样发送邮件:

mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);

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

网络空间 One.com,所以我不能使用PHPmailer(因为必须安装,而这不能在一个.com的服务器上完成)。我无法用 One.com 来定义SPF。

我想要的只是能够发送不会成为垃圾邮件的电子邮件。

以下是我的问题:

  1. 是因为我的标题关闭了,还是“更深”的东西?

  2. Gmail 垃圾邮件过滤器是禁止单个电子邮件帐户(如 )还是禁止整个域(如 )?this@example.com@example.com

  3. 可以以某种方式将列入黑名单的电子邮件列入白名单吗?

* 添加 1 *

还行。。。我现在已经尝试了很多事情:

  • 我尝试添加LoneWolfPR的返回路径,就像推荐的那样,但它没有帮助。
  • 我联系了 One.com(托管公司),并与他们确认,无法设置SPF记录或DKIM记录。事实并非如此。
  • 我考虑过设置一个“取消订阅”链接,链接到一个带有表单的网站,但我不相信这种方法。我的意思是 - 发票一直通过电子邮件发送。为什么您应该能够取消订阅发票?!由于这在我的脑海中远远没有意义,所以我只尝试了大约20分钟(显然,没有结果)。

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

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

答案 1

1)通常,电子邮件地址不会轻易进入黑名单,需要时间和/或很多人将您标记为垃圾邮件发送者才能将该地址实际列入黑名单。

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

3)它进入垃圾邮件箱的次数并不重要,基本上,现在的垃圾邮件过滤器很强大,因为垃圾邮件发送者试图改善他们每天的出行方式,所以过滤器每天都变得更加严格。如果它第一次进入垃圾邮件文件夹,并且用户实际上并没有将其放入垃圾邮件箱,它将继续运行,除非用户取消标记它,或者您修复了问题。

如何避免垃圾邮件箱?

基本上,您需要一些签名,以及对DNS记录的大量访问权限,因为我们将在那里进行大多数设置。

  • 反向DNS查找:在专用服务器上,甚至在某些VPS上,您都可以设置反向DNS记录,有时您只需打开票证,IT就会为您设置。如果您无法拥有它,请更改您的主机或继续被标记为垃圾邮件发送者xD。这是为了防止标题伪造,因为您可以在标题上设置您的电子邮件来自 gmail.com 但这不是电子邮件服务器检查它的方式。

  • SPF也是必须的,如果你不能设置一个SPF,那么甚至不要再尝试了,考虑改变你的主机,你几乎可以停止阅读这里 xD.

  • DKIM/域密钥:最好是DKIM,是一个加密的签名,您在DNS上设置公钥,并将私钥存储在您的电子邮件服务器中,当服务器收到电子邮件时,它会在标头中附加私钥(您需要一个管理DKIM的邮件服务器软件,例如Windows,它适用于我hmailserver)和邮件服务(例如gmail)将检查您的DNS记录以查看公共密钥匹配。这几乎是必须的


这三个是基础,如果你设置DMARC和ADSP,它会让你在SpamAssassins上获得更好的分数。为了获得更好的分数,请在Google上搜索一些垃圾邮件关键字列表并尝试避免它们,一些东西,例如使用“亲爱的xxx”开始电子邮件对您的分数有害,设置unsuscribe系统(即使它很糟糕,只要您提供清晰的链接)也会对您有所帮助。

也:

  • 避免在(任何)背景上草率的html和白色文本,一些垃圾邮件发送者使用它来适应隐藏的文本,这些过滤器比你想象的更聪明。

  • 阅读具体建议。大多数电子邮件服务在其网站中都有常见问题解答或某些内容,其中包含一些提示,可帮助您发送电子邮件而不会进入垃圾邮件。在其中一些,您甚至可以申请进入白名单(至少几年前,在gmail等某些服务上,他们不再这样做了)

  • 如果您要批量发送,请留意时间!如果您每秒有X封电子邮件发送到某个地方,您可能会进入黑名单,设置脚本或某些东西以获得1秒左右的延迟,延迟可能取决于目的地是否进入黑名单。


希望这些提示对您有所帮助,我最近不得不处理一些垃圾邮件过滤器,这是一个痛苦的屁股,这就是为什么我知道所有这些信息,这就是我所有的研究xD即使我已经设置了所有签名和东西,一些电子邮件仍然进入垃圾邮件箱(一个较小的百分比,但它仍然伤害我)唯一可靠的方法是让用户将您添加到联系人中list(同时正确使用签名和标头),因此请尽可能提醒他们这样做。


答案 2

要记住的一件事是,我在Gmail和Yahoo!来自php的邮件中阻止电子邮件时遇到了麻烦,因为Return-Path标头与来自的不匹配。在很多服务器上,如果您在标头中显式设置了返回路径,PHP Mail将忽略它并将返回路径设置为计算机名称。您必须使用“-f”标志在邮件函数的“其他参数”部分中强制使用它。现在我从来没有使用过Swift Mailer,所以我不知道等同于PHP的原生mail()函数,但这是使用mail()的样子;

mail($to,$subject,$message,$headers,'-f returnpath@example.com')

如果你能在Swift mailer中找到与此等效的东西,它可能会解决你的问题。

编辑:

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

$message->setReturnPath('from@example.com');

推荐