1

我使用 PHP 的 mail() 函数发送一些电子邮件。但是我所有的邮件都会自动进入垃圾箱。有没有办法防止这种情况?如果是这样,我应该在哪里阅读以了解更多信息。

你会推荐我使用 PHPmailer 吗?

最好的问候,亚历山大

4

5 回答 5

7

TL;DR:没有灵丹妙药。仅仅因为您可以学习如何在 PHP 中形成电子邮件,并不能保证它会被路由到某人的邮箱,甚至被接受。成功是基于声誉,而不是任何单一的解决方案。

我是(编辑:曾经是)一名邮件服务器工程师,编写过 SpamAssassin 规则,并且对发送或接收电子邮件的客户有深层次的问题。

收件人的邮件服务器扫描您的电子邮件,查找属性和“历史问题”(缺少邮件代理、来自您的网络服务器 IP 等)。这些获得“积分”。比较总点数,接收方的服务器可能会执行以下一项或多项操作:

  • 项目清单
  • 在 SMTP 期间被拒绝,
  • 路由到垃圾邮件文件夹,
  • 路由到收件箱,但标记为“垃圾邮件
  • 黑洞(接受,然后神秘地丢失)。

“分数”(分数)仅对特定的反垃圾邮件解决方案意味着某些东西。没有公开测试。解决所有可以解决的问题,然后成功。

*#1 问题是:不要将电子邮件直接发送到收件人的 SMTP 服务器。该网络空间发送 99.9% 的垃圾邮件。扫描电子邮件需要花钱,因此优秀的电子邮件管理员会阻止或拒绝此类连接。

您的源 IP 的“修复”是:使用 SMTP 网关。网关可以是我们的 ISP 邮件服务器,也可以是商业服务。首先检查他们的服务条款。他们可能会禁止使用经过身份验证的 Web 表单发送电子邮件,因为这些表单经常被滥用(“有人黑了我”不是借口)。

如果您有电子邮件托管,请执行以下操作:创建一个名为“website-notification@websitedomain.com”的邮箱。随便叫什么。现在您希望您的 PHP 脚本使用Authenticated SMTP通过该地址发送电子邮件。我将把学习如何使用 PHP 中的 Authenticated SMTP 的过程作为学习练习留给你——网上有很多教程)。

一旦您通过有效的 SMTP 服务器发送电子邮件,该邮件就会被视为来自您的 SMTP 网关。它不被视为来自您的脚本。但这不是故事的结局

  1. 正如其他人所指出的,请确保您没有丢失显示标题,例如 To: From: Subject: 和 Date:。严格来说,这些标头在电子邮件握手中不是“必需的”,但实际上没有信誉良好的电子邮件软件会忽略它们。此外,日期必须采用标准日期格式,否则某些垃圾邮件过滤器会对其进行标记。

不要将此主题与“信封标头”(SMTP 握手中的隐藏内容)混淆,这也会影响您的分数。使用 SMTP 网关通常会解决这个问题(因为收件人的邮件服务器将与您的网关主机握手)。

  1. 您的 FROM 地址必须是有效的。不要使用假域名。不要将您的域名与虚假邮箱名称一起使用。一些反垃圾邮件软件会执行“发件人验证”来测试发件人地址是伪造的还是伪造的(过于简单化:他们会尝试发送回复,看看您是否接受)。

第一个错误是将您的发件人地址设置为“noreply@yourdomain.com”,而不是创建该邮箱。发生这种情况时,您电子邮件上的每个人的“发件人验证”都会失败,您看起来就像是一个垃圾邮件发送者,掩盖了他们的踪迹。

  1. 如果您的域 DNS 有 SPF 记录,请 100% 确保它列出了可能为您的域发送电子邮件的每个 IP。这是一个技术话题。拥有有效、正确的 SPF 记录有助于您的交付能力。但是,如果您误解并创建了错误(不正确)的 SPF 记录,您的情况会更糟。在使用它之前花点时间了解一下。

  2. 如果您的企业有真实地址或邮政信箱,请尽量避免使用“域注册隐私”或“域代理”服务。撰写本文时(2011 年),匿名服务可能会阻止您的邮件或“标记为垃圾邮件”,这在过去是非常真实的。这在今天不太正确,但仍然值得考虑。

  3. 了解您的邮件服务器的 IP 地址,并定期检查它是否未在 SpamCop、SpamHaus 或梭子鱼垃圾邮件黑名单中“列入黑名单”。谷歌了解更多。有监控服务和脚本可以提醒您。但是,如果您进入这些列表,则意味着发生了您没有监控的其他事情……

如前所述,没有简单的答案。:)

于 2011-08-11T15:00:03.217 回答
3

我想你的意思是接收器端的thrash box。所以基本上接收电子邮件服务器将其视为垃圾邮件。在以下情况下可能会发生这种情况:

1)您发送的 IP 已经被列入垃圾邮件黑名单(经常发生在共享主机中)

2)IP和域名相对较新且未知。

(请注意,很多时候,来自知名网站的时事通讯也会以垃圾邮件告终)。

如果它是您的专用 IP,则为 IP 设置 RDNS 以匹配域名很可能会解决问题。另一种通常的做法是提醒接收者(如果她在您的网站上订阅)检查他们的 thrash/spam 文件夹并将您的电子邮件地址列入他们的邮件帐户中的白名单。

问候,

J.P

于 2010-12-25T06:48:23.250 回答
3

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);
于 2010-12-25T06:54:17.860 回答
0

这可能与您的邮件客户端和垃圾邮件设置配置有关。尝试打开帐户gmail.com并在那里发送电子邮件,如果没问题,您就知道这是您的邮件服务器/客户端问题。如果不是,请发布您的 PHP 代码和您收到的电子邮件的完整电子邮件标题。

于 2010-12-25T06:45:47.070 回答
0

发生这种情况是因为很多时候,如果不存在众所周知的电子邮件服务器域密钥签名或类似的东西,标头就会丢失。如果您已经有一个单独的电子邮件服务器,您应该检查是否可以使用 PHP Pear Mail 包使用您的电子邮件服务器发送电子邮件,而不是直接通过邮件功能。这就是我觉得方便的地方,因为它更灵活。

于 2010-12-25T07:11:39.213 回答