PHPMailer 550 Bad HELO 錯誤

PHPMailer: 550 Bad HELO - Host impersonating domain name

懶人包

在原本的

    $mail->Host = $smtpHost;

下面再加入一行

    $mail->Hostname = $smtpHost; 

事源及解決方法

其中一個項目無法使用phpmailer 經SMTP寄到信 打開Debug模式再試

$mail->SMTPDebug = 1; //測試後記得一定要改回0

發現報錯

550 Bad HELO - Host impersonating domain name 

原因是網站所在的servermail 所在的server 不一是同一台server,mail server 就拒絕代為寄出,認為是冒充域名

錯誤的原因大約是這樣,其實把ip加入mail server白名單之類的非常麻煩,但如果你的網站ip更換了,忘記去mail server 改白名單,又會寄不到信

所以最好的方法是直接在代碼中解決

原本的代碼:

    $smtpHost = "mail.abc123.com";
    $smtpUsername = "sky@abc123";
    $smtpPassword = "paddword";
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 0;
    $mail->Host = $smtpHost;

只需要在最下面再加入一行

    $mail->Hostname = $smtpHost; 

注:Host 和 Hostname 在PHPMailer 有不同的定義

邏輯上有點複雜,簡而言之,這樣就解決了mail server 認為是 冒充域名 的問題

ref: https://github.com/PHPMailer/PHPMailer/issues/1095