繁体   English   中英

带有From:标头的PHP mail()阻止传递

[英]PHP mail() with From: header prevents delivery

首先,第一件事...我知道邮件的传递能力受数百个因素影响,因此,绝对不能确定是由某件事引起的。 (我希望这样。)

我的问题是邮件服务器阻塞/ From:标题不同的邮件是否正常/是否正常。 我的联系表单处理程序使用此格式,以便收件人可以回复发件人(下面的代码)。 Gmail帐户能够接收邮件。 但是我的客户有一个机构的.edu电子邮件地址,并且电子邮件未送达。

这是我的代码的最低版本:

<?php 

$first_name = 'John';
$last_name = 'Smithy';
$email = "myemail@whyisntthisworking.com";
$msg = "This is a test email. If you received it things are working.";

$test_email = (isset($_POST['test_email'])) ? $_POST['test_email'] : FALSE;

$to;
$from = $email;
$subject = "Contact from JamesGregoryMD.com";
$body = wordwrap( "{$first_name} {$last_name}:\n\n{$msg}\n\n{$email}\n{$phone}", 70);
$headers = "From: {$from}" . "\r\n";

if ($test_email) {
    # send email
    $return = mail($test_email,"Test email",$body, $headers);

    if ($return) {
        echo "<h1>MAIL SENT</h1>";
    } else {
        echo "<h1>MAIL NOT SENT</h1>";
    }
}
?>

<form id="contact" method="post">
    <input type="email" name="test_email" placeholder="email" />
    <input type="submit" value="Send" />
</form>

您实际上正在做的是“欺骗”发件人地址。 根据SMTP的定义,这是完全可以接受的,但这只是因为当Internet成立之初,没有人认为它将被滥用。 不幸的是,这给垃圾邮件发送者敞开了大门,因此通常会进行各种检查,您可能会遇到以下问题:

  • 当连接到SMTP服务器(以将邮件传递给该域上的用户)时,客户端将发送带有其身份的“ HELO”(或扩展的“ EHLO”)消息。 一些服务器将拒绝与From头不匹配的消息。 根据设置的不同,将"-f$from_address"作为第5个参数添加到mail()函数中可能会带来一些乐趣。
  • 其他服务器可能会验证您实际上是从该参数中提到的域进行连接,因此仍然不喜欢它。
  • 更复杂的系统将检查发件人地址域上的DNS记录,以查找允许的发件人信息。 在线查找“ SPF”和“ DKIM”,您应该找到有关如何检查和设置它们的信息。

使用Reply-To:标头而不是From: ,您可能不会遇到此问题(但将获得相同的功能)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM