10

我正在尝试从我正在构建的站点发送电子邮件,但它最终出现在雅虎垃圾邮件文件夹中。它是发送凭据的电子邮件。我能做些什么来使其合法化?

$header = "From: site <sales@site.com>\r\n";
$header .= "To: $name <$email>\r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site <sales@site.com>" . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);
4

9 回答 9

10
  • 不要在您的电子邮件中使用 HTML。
  • 通过具有静态 IP 和反向 DNS (PTR) 的合法邮件服务器发送它,该服务器指向机器的真实主机名(并匹配正向查找)。
  • 包括一个 Message-ID(或确保本地邮寄者为您添加一个)。
  • 通过SpamAssassin运行您的电子邮件,并查看它匹配哪些不良评分规则。避免匹配它们。
  • 使用DomainKeys Identified Mail对您的邮件进行数字签名。
于 2008-10-02T06:05:42.920 回答
4

我刚刚从我的 Yahoo! 成功尝试了以下操作!虚拟主机帐户:

$email = "我@site.com";
$subject = "简单测试";
$body = "简单测试";
$header = "来自:站点 \r\n";
$header .= "收件人:$name \r\n";
$header .= "主题:$subject\r\n";
$header .= "回复:网站" . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= '内容类型:文本/html; 字符集=iso-8859-1' 。"\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
邮件($email,$subject,$body,$header);

但是,您的标题中有一些重复,您只需要执行以下操作:

$email = "我@site.com";
$subject = "简单测试";
$body = "简单测试";
$header = "来自:站点 \r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= '内容类型:文本/html; 字符集=iso-8859-1' 。"\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
邮件($email,$subject,$body,$header);
于 2008-10-02T06:19:31.203 回答
2

除了 Ted Percival 的建议之外,您可以尝试使用PHPMailer为您创建电子邮件,而不是手动构建标题。我已经广泛使用了这个类,并且没有遇到任何电子邮件被雅虎或其他任何人拒绝为垃圾邮件的问题。

于 2008-10-02T10:47:38.983 回答
2

'sendmail'(位于 PHP mail() 函数下面)也有可能需要额外的参数。如果您的返回标头(例如 Return-Path)没有按照您设置的方式设置,您可能需要使用第五个mail() 参数。例子:

mail('recipient@domain.com', 'Subject', $mail_body, $headers, " -f sender@domain.com");

有一些进一步的证据表明,真正的普通 sendmail 可能对此有问题!希望您在目标服务器上拥有“后缀”作为 PHP 的底层 mail() 支持。

于 2010-02-03T19:15:16.473 回答
1

除了Ted Percival 的建议之外,根据site.com的SPF 记录,请确保电子邮件来自的 IP 地址是电子邮件的合法来源。如果 site.com 没有 SPF 记录,则添加一个(当然,它允许有问题的 IP 地址)可能有助于让电子邮件通过垃圾邮件过滤器。

如果确实需要在您的电子邮件中使用 HTML,请确保您还包含纯文本版本;您将使用“multipart/alternative”而不是“text/html”的内容类型。

于 2008-10-02T06:14:20.297 回答
1

Ted 的建议和 Tim 的建议都很好,但我能够可靠地将电子邮件发送到 Yahoo/Hotmail/etc 的唯一方法是使用 PEAR 电子邮件类。试试那些 & (假设你的服务器没问题)我几乎可以保证它会工作。

于 2008-10-02T06:48:45.830 回答
1

泰德和蒂姆有很好的建议。就像寒衣一样。我们使用 PHPMailer,垃圾邮件过滤器没有任何问题。

需要注意的一件事是,如果您使用 MIME 格式,许多垃圾邮件过滤器会认为没有针对您的文本版本。您可以自己添加所有标题和文本版本,或者让 PHPMailer 或 PEAR 邮件库为您处理。拥有文本版本可能有帮助,也可能没有帮助,但这是一种很好的做法并且对用户友好。

我意识到您的代码示例就是这样 - 一个示例,但值得一提的是:永远不要将用户提供的数据放入您的邮件标题中。确保您验证它是您期望的数据。将一个 php 邮件脚本变成一个开放的中继是微不足道的,没有人想要这样。

于 2008-10-03T00:10:56.307 回答
0

检查 rfc 822 和 rfc 2045 的电子邮件格式。我发现 python 的 Email 类真的很容易使用。我假设 php 的 PEAR 也是如此(根据早期的邮件)。标题和正文也由“\r\n\r\n”分隔,不确定您的代码是否会自动插入,但您可以尝试将其附加到标题中。

我不认为 DK/SPF 可能是必要的(因为那里有很多没有 DK/SPF 支持的网络服务器)。可能有很多因素可能导致它被阻止(至少 10K 不同的标准和方法.. p0f、灰名单、灰名单、黑名单等)。确保您的电子邮件格式正确(这有很大的不同)。查看为您生成完整标题的库..这样您犯错误的机会最小。

于 2008-10-02T07:34:26.047 回答
0

添加 SPF 记录非常简单。你应该试试。

这个是为dreamhost加上googlemail的 你还应该给你的网络服务器IP地址做广告(在我的例子中,在googlemail之前的那一行)最后一行告诉服务器做一个软拒绝(标记为垃圾邮件但不要删除)我正在使用它而不是“-”(删除),因为谷歌文档是这样说的:-)

这是一个TXT记录 v=spf1 ip4:64.111.100.0/24 ip4:66.33.201.0/24 ip4:66.33.216.0/24 ip4:208.97.132.0/24 ip4:208.97.187.0/24 ip4:208.113.200.0/24 ip :208.113.244.0/24 ip4:208.97.132.74 ip4:67.205.36.71 包括:aspmx.googlemail.com mx ~all

希望能帮助到你

于 2009-07-02T07:38:19.070 回答