符合标准的电子邮件标头需要什么

时间:2020-03-06 15:00:41  来源:igfitidea点击:

我正在尝试从正在构建的站点发送电子邮件,但最终在yahoo垃圾邮件文件夹中。这是发送凭据的电子邮件。我该怎么做才能使其合法化?

$header = "From: site <[email protected]>\r\n";
$header .= "To: $name <$email>\r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site <[email protected]>" . "\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);

解决方案

  • 不要在电子邮件中使用HTML。
  • 通过具有静态IP和反向DNS(PTR)的合法邮件服务器将其发送,该服务器指向计算机的真实主机名(并与正向查找匹配)。
  • 包括一个消息ID(或者确保本地邮件程序为我们添加一个)。
  • 通过SpamAssassin运行电子邮件,并查看匹配的不良评分规则。避免匹配它们。
  • 使用DomainKeys Identified Mail对邮件进行数字签名。

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

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

我刚刚在Yahoo!上成功尝试了以下方法!虚拟主机帐户:

$email = "[email protected]";
$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 = "[email protected]";
$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);

泰德(Ted)的建议和蒂姆(Tim)的建议一样好,但是我能够可靠地将电子邮件发送到Yahoo / Hotmail / etc的唯一方法是使用PEAR电子邮件类。尝试那些&(假设服务器正常),我可以保证它会工作。

检查RFC 822和RFC 2045的电子邮件格式。我发现python的Email类非常容易使用。我认为php的PEAR也是一样(根据以前的邮件)。标头和正文之间也用" \ r \ n \ r \ n"分隔,不确定代码是否自动插入标头,但可以尝试将其添加到标头。

我认为DK / SPF可能不是必需的(因为那里有许多不带DK / SPF支持的Web服务器)。可能有很多因素可能导致它被阻止(至少10K不同的标准和方法。.p0f,灰名单,灰名单,黑名单等)。确保电子邮件格式正确(这有很大的不同)。查看可为我们生成完整标头的库..这样,我们几乎没有机会犯任何错误。

除了Ted Percival的建议之外,我们可以尝试使用PHPMailer为我们创建电子邮件,而不是手动构建标题。我已经广泛使用了该课程,并且对于Yahoo或者其他任何人拒绝将其作为垃圾邮件的电子邮件也没有任何麻烦。

泰德(Ted)和蒂姆(Tim)有很好的建议。像是Shabbyrobe。我们使用PHPMailer,垃圾邮件过滤器没有任何问题。

需要注意的一件事是,如果我们使用的是MIME格式,那么许多垃圾邮件过滤器都将不具有文本版本。我们可以自己添加所有标题和文本版本,或者只是让PHPMailer或者PEAR邮件库为我们处理。拥有文本版本可能会有所帮助,也可能无济于事,但这是一种好的做法,而且用户友好。

我意识到代码示例只是一个示例,但是值得一提:永远不要将用户提供的数据放到邮件头中。确保我们验证它是我们期望的数据。将php邮件脚本转换为开放中继是微不足道的,没有人希望这样做。

添加SPF记录非常容易。你应该试试。

这个是给Dreamhost加Googlemail的
我们还应该为网络服务器IP地址做广告(在我的情况下,是googlemail之前的行)
最后一行告诉服务器执行软拒绝(将其标记为垃圾邮件,但不要删除),我使用的是它而不是"-"(删除),因为Google文档说:-)

这是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
〜所有

希望能帮助到你

还有可能" sendmail"(在PHP mail()函数的下面)需要额外的参数。如果我们对返回标头(例如Return-Path)的设置不满意,则可能需要使用第五个mail()参数。例子:

mail('[email protected]', 'Subject', $mail_body, $headers, " -f [email protected]");

还有一些证据表明,真正的香草sendmail可能对此有问题!希望我们在目标服务器上具有" postfix"作为PHP的基础mail()支持。