簡體   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