我使用 PHP 的 mail() 函数发送一些电子邮件。但是我所有的邮件都会自动进入垃圾箱。有没有办法防止这种情况?如果是这样,我应该在哪里阅读以了解更多信息。
你会推荐我使用 PHPmailer 吗?
最好的问候,亚历山大
我使用 PHP 的 mail() 函数发送一些电子邮件。但是我所有的邮件都会自动进入垃圾箱。有没有办法防止这种情况?如果是这样,我应该在哪里阅读以了解更多信息。
你会推荐我使用 PHPmailer 吗?
最好的问候,亚历山大
TL;DR:没有灵丹妙药。仅仅因为您可以学习如何在 PHP 中形成电子邮件,并不能保证它会被路由到某人的邮箱,甚至被接受。成功是基于声誉,而不是任何单一的解决方案。
我是(编辑:曾经是)一名邮件服务器工程师,编写过 SpamAssassin 规则,并且对发送或接收电子邮件的客户有深层次的问题。
收件人的邮件服务器扫描您的电子邮件,查找属性和“历史问题”(缺少邮件代理、来自您的网络服务器 IP 等)。这些获得“积分”。比较总点数,接收方的服务器可能会执行以下一项或多项操作:
“分数”(分数)仅对特定的反垃圾邮件解决方案意味着某些东西。没有公开测试。解决所有可以解决的问题,然后成功。
*#1 问题是:不要将电子邮件直接发送到收件人的 SMTP 服务器。该网络空间发送 99.9% 的垃圾邮件。扫描电子邮件需要花钱,因此优秀的电子邮件管理员会阻止或拒绝此类连接。
您的源 IP 的“修复”是:使用 SMTP 网关。网关可以是我们的 ISP 邮件服务器,也可以是商业服务。首先检查他们的服务条款。他们可能会禁止使用经过身份验证的 Web 表单发送电子邮件,因为这些表单经常被滥用(“有人黑了我”不是借口)。
如果您有电子邮件托管,请执行以下操作:创建一个名为“website-notification@websitedomain.com”的邮箱。随便叫什么。现在您希望您的 PHP 脚本使用Authenticated SMTP通过该地址发送电子邮件。我将把学习如何使用 PHP 中的 Authenticated SMTP 的过程作为学习练习留给你——网上有很多教程)。
一旦您通过有效的 SMTP 服务器发送电子邮件,该邮件就会被视为来自您的 SMTP 网关。它不被视为来自您的脚本。但这不是故事的结局
不要将此主题与“信封标头”(SMTP 握手中的隐藏内容)混淆,这也会影响您的分数。使用 SMTP 网关通常会解决这个问题(因为收件人的邮件服务器将与您的网关主机握手)。
第一个错误是将您的发件人地址设置为“noreply@yourdomain.com”,而不是创建该邮箱。发生这种情况时,您电子邮件上的每个人的“发件人验证”都会失败,您看起来就像是一个垃圾邮件发送者,掩盖了他们的踪迹。
如果您的域 DNS 有 SPF 记录,请 100% 确保它列出了可能为您的域发送电子邮件的每个 IP。这是一个技术话题。拥有有效、正确的 SPF 记录有助于您的交付能力。但是,如果您误解并创建了错误(不正确)的 SPF 记录,您的情况会更糟。在使用它之前花点时间了解一下。
如果您的企业有真实地址或邮政信箱,请尽量避免使用“域注册隐私”或“域代理”服务。撰写本文时(2011 年),匿名服务可能会阻止您的邮件或“标记为垃圾邮件”,这在过去是非常真实的。这在今天不太正确,但仍然值得考虑。
了解您的邮件服务器的 IP 地址,并定期检查它是否未在 SpamCop、SpamHaus 或梭子鱼垃圾邮件黑名单中“列入黑名单”。谷歌了解更多。有监控服务和脚本可以提醒您。但是,如果您进入这些列表,则意味着发生了您没有监控的其他事情……
如前所述,没有简单的答案。:)
我想你的意思是接收器端的thrash box。所以基本上接收电子邮件服务器将其视为垃圾邮件。在以下情况下可能会发生这种情况:
1)您发送的 IP 已经被列入垃圾邮件黑名单(经常发生在共享主机中)
2)IP和域名相对较新且未知。
(请注意,很多时候,来自知名网站的时事通讯也会以垃圾邮件告终)。
如果它是您的专用 IP,则为 IP 设置 RDNS 以匹配域名很可能会解决问题。另一种通常的做法是提醒接收者(如果她在您的网站上订阅)检查他们的 thrash/spam 文件夹并将您的电子邮件地址列入他们的邮件帐户中的白名单。
问候,
J.P
JP 的回答部分正确,但也可能是我从经验中知道的电子邮件中的标题,这会将内容发送到垃圾邮件文件夹,请尝试以下操作;
将电子邮件设置为您的域,例如无回复或有效回复。
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
这可能与您的邮件客户端和垃圾邮件设置配置有关。尝试打开帐户gmail.com
并在那里发送电子邮件,如果没问题,您就知道这是您的邮件服务器/客户端问题。如果不是,请发布您的 PHP 代码和您收到的电子邮件的完整电子邮件标题。
发生这种情况是因为很多时候,如果不存在众所周知的电子邮件服务器域密钥签名或类似的东西,标头就会丢失。如果您已经有一个单独的电子邮件服务器,您应该检查是否可以使用 PHP Pear Mail 包使用您的电子邮件服务器发送电子邮件,而不是直接通过邮件功能。这就是我觉得方便的地方,因为它更灵活。