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

时间:2015-02-12 14:02:41

标签: php email

首先要做的事情......我知道邮件的可传递性受到数百个因素的影响,因此,如果一个特定的事情是原因,就永远不可能说出来。 (我期待这个。)

我的问题是邮件服务器是否正常/预期会阻止具有不同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>

2 个答案:

答案 0 :(得分:1)

你实际做的是“欺骗”发件人地址。根据SMTP的定义,这是完全可以接受的,但仅仅因为当互联网年轻时,没有人认为它会被滥用。不幸的是,这为垃圾邮件发送者敞开了大门,因此通常会执行各种检查,您可能会遇到这些检查:

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

答案 1 :(得分:1)

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