兼容的电子邮件标题需要什么?

时间:2008-10-02 06:00:01

标签: php email header

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

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

9 个答案:

答案 0 :(得分:10)

  • 请勿在电子邮件中使用HTML。
  • 通过带有静态IP和反向DNS(PTR)的合法邮件服务器发送,指向机器的真实主机名(并匹配正向查找)。
  • 包含消息ID(或确保本地邮件程序为您添加一个)。
  • 通过SpamAssassin运行您的电子邮件,看看它匹配哪些得分规则。避免匹配它们。
  • 使用DomainKeys Identified Mail对您的邮件进行数字签名。

答案 1 :(得分:4)

我刚从Yahoo!成功尝试了以下内容!网页寄存帐户:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "To: $name \r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site " . "\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);

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

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \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);

答案 2 :(得分:2)

除了Ted Percival的建议,您可以尝试使用PHPMailer为您创建电子邮件,而不是手动构建标题。我已经广泛使用这个课程,并且没有任何麻烦,因为雅虎或其他任何人都拒绝将电子邮件作为垃圾邮件拒绝。

答案 3 :(得分:2)

'sendmail'(在PHP mail()函数下面)还有可能需要额外的参数。如果您没有使用您设置的返回标头(例如Return-Path)设置问题,则可能需要使用第五个 mail()参数。例如:

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

还有一些证据表明真正的香草邮件可能有问题!希望你的'postfix'作为PHP在目标服务器上的底层mail()支持。

答案 4 :(得分:1)

除了Ted Percival's suggestions之外,请确保根据site.com的SPF record,电子邮件来自的IP地址是电子邮件的合法来源。如果site.com没有SPF记录,那么添加一个(当然允许使用相关IP地址)可能有助于使电子邮件通过垃圾邮件过滤器。

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

答案 5 :(得分:1)

Ted的建议很好,Tim也是如此,但我能够可靠地通过电子邮件发送到Yahoo / Hotmail /等的唯一方法就是使用PEAR电子邮件课程。尝试那些&amp; (假设你的服务器没问题)我几乎可以保证它能正常工作。

答案 6 :(得分:1)

特德和蒂姆提出了很好的建议。和Shabbyrobe一样。我们使用PHPMailer,垃圾邮件过滤器没有任何问题。

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

我意识到您的代码示例就是这样 - 一个示例,但值得一说:不要只是将用户提供的数据丢弃到您的邮件头中。确保验证它是您期望的数据。将一个php邮件脚本变成一个开放的中继是没有用的,没人会想要。

答案 7 :(得分:0)

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

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

答案 8 :(得分: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 ip4:208.113.244.0/24 ip4:208.97.132.74 ip4:67.205.36.71 包括:aspmx.googlemail.com mx~all

希望有所帮助