即使在添加 SPF 记录后,PHPMailer 的电子邮件仍然在某些客户端上进入垃圾邮件
E-Mails of PHPMailer still getting into SPAM on some clients even after adding SPF-record
所以我开发了一个自动邮件系统,通过它我使用 PHPMailer Extension 在 PHP 中发送自动电子邮件。
首先,我用 PHPMailer 发送的大部分电子邮件都落入了几个客户的垃圾邮件中,这是一个众所周知的问题。我已经与我的主机核实过,我们创建了一个 SPF 记录;结果改善了很多。
巧合的是,我发现有些客户似乎仍然会将通过 PHPMailer 脚本收到的邮件丢弃到他们的垃圾邮件文件夹中。如果我手动发送相同的电子邮件,它不会发生,所以它似乎与 PHPMailer;所以我一定是做错了什么。
我目前使用的配置/代码是:
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = $host; // verified with my host
$mail->Port = 465;
$mail->Username = 'mymail@mydomain.com'; // verified with my host
$mail->Password = 'mypassword'; // verified with my host
$mail->SMTPSecure = 'ssl';
$mail->SMTPAutoTLS = true;
$mail->setFrom( 'mymail@mydomain.com', 'This is the Header of the E-Mail' );
$mail->addAddress( 'recipientsmail@hisdomain.com', '' );
$mail->isHTML( true );
$mail->Subject = 'This is the Subject of the E-Mail';
$mail->CharSet = 'UTF-8';
$mail->Body = 'HTML Content of the E-Mail';
$mail->send();
$mail->SmtpClose();
请注意,我的托管服务提供商不支持任何 DKIM 签名认证;并且我还通过我的提供商验证了正确的反向 DNS 查找。
我想念的人是什么?
我有趣的是 this post 来到这里;其中写道“IANA 已将新服务重新分配给此端口 [465],不应再将其用于 SMTP 通信。”
文章推荐使用tls
,端口587
应该是默认的方式。这可能是问题所在吗?还是我在 PHPMailer 上遗漏了什么?我只是想在切换任何东西之前确定一下,因为我根本不是电子邮件领域的专家。好吧,我从来没有听说过这个端口问题。
邮件是否最终成为垃圾邮件是很难控制的。实施 SPF 和 DKIM 可以提供帮助,但仍不能提供任何保证。如果绕过垃圾邮件过滤器很容易,那么垃圾邮件发送者就会这样做,而他们就不是垃圾邮件过滤器了! an article in the PHPMailer wiki about avoiding spam filters 可能对您有所帮助。收到的邮件中的 headers 通常会告诉您 为什么 将邮件放入垃圾邮件文件夹,例如列出它匹配的 spamassassin 规则。
你说它“手动”工作,但它是从同一个地方发送的吗(例如在你的本地机器上)?您可以获得通过每个路由发送的消息的原始文本,并比较它们以查看有什么不同(除了明显的消息 ID 之类的东西)。
MailGun 文章已过时。从那时起,RFC8314 不仅“不推荐使用”端口 465,现在建议将其作为默认端口,因为它消除了 SMTP+STARTTLS 在端口 587 上使用的 pre-encryption 阶段中可能的攻击媒介。不幸的是,它也使得从 PHP 进行调试变得更加困难,并且在未明确请求加密时拒绝进行机会加密的机会,因此它不是 PHPMailer(目前)中的默认设置。
所以我开发了一个自动邮件系统,通过它我使用 PHPMailer Extension 在 PHP 中发送自动电子邮件。
首先,我用 PHPMailer 发送的大部分电子邮件都落入了几个客户的垃圾邮件中,这是一个众所周知的问题。我已经与我的主机核实过,我们创建了一个 SPF 记录;结果改善了很多。
巧合的是,我发现有些客户似乎仍然会将通过 PHPMailer 脚本收到的邮件丢弃到他们的垃圾邮件文件夹中。如果我手动发送相同的电子邮件,它不会发生,所以它似乎与 PHPMailer;所以我一定是做错了什么。
我目前使用的配置/代码是:
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = $host; // verified with my host
$mail->Port = 465;
$mail->Username = 'mymail@mydomain.com'; // verified with my host
$mail->Password = 'mypassword'; // verified with my host
$mail->SMTPSecure = 'ssl';
$mail->SMTPAutoTLS = true;
$mail->setFrom( 'mymail@mydomain.com', 'This is the Header of the E-Mail' );
$mail->addAddress( 'recipientsmail@hisdomain.com', '' );
$mail->isHTML( true );
$mail->Subject = 'This is the Subject of the E-Mail';
$mail->CharSet = 'UTF-8';
$mail->Body = 'HTML Content of the E-Mail';
$mail->send();
$mail->SmtpClose();
请注意,我的托管服务提供商不支持任何 DKIM 签名认证;并且我还通过我的提供商验证了正确的反向 DNS 查找。
我想念的人是什么?
我有趣的是 this post 来到这里;其中写道“IANA 已将新服务重新分配给此端口 [465],不应再将其用于 SMTP 通信。”
文章推荐使用tls
,端口587
应该是默认的方式。这可能是问题所在吗?还是我在 PHPMailer 上遗漏了什么?我只是想在切换任何东西之前确定一下,因为我根本不是电子邮件领域的专家。好吧,我从来没有听说过这个端口问题。
邮件是否最终成为垃圾邮件是很难控制的。实施 SPF 和 DKIM 可以提供帮助,但仍不能提供任何保证。如果绕过垃圾邮件过滤器很容易,那么垃圾邮件发送者就会这样做,而他们就不是垃圾邮件过滤器了! an article in the PHPMailer wiki about avoiding spam filters 可能对您有所帮助。收到的邮件中的 headers 通常会告诉您 为什么 将邮件放入垃圾邮件文件夹,例如列出它匹配的 spamassassin 规则。
你说它“手动”工作,但它是从同一个地方发送的吗(例如在你的本地机器上)?您可以获得通过每个路由发送的消息的原始文本,并比较它们以查看有什么不同(除了明显的消息 ID 之类的东西)。
MailGun 文章已过时。从那时起,RFC8314 不仅“不推荐使用”端口 465,现在建议将其作为默认端口,因为它消除了 SMTP+STARTTLS 在端口 587 上使用的 pre-encryption 阶段中可能的攻击媒介。不幸的是,它也使得从 PHP 进行调试变得更加困难,并且在未明确请求加密时拒绝进行机会加密的机会,因此它不是 PHPMailer(目前)中的默认设置。