PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人

Posted

技术标签:

【中文标题】PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人【英文标题】:PHPMailer sends email with SMTP authentication but Gmail still claims it cannot validate sender 【发布时间】:2021-01-08 12:14:19 【问题描述】:

我正在使用 phpMailer 从我的 PHP 脚本发送经过 SMTP 身份验证的电子邮件。 PHPMailer 脚本可以正常工作,它不会引发任何错误,并且我会收到我的测试电子邮件,但是它们仍然在我的 gmail 收件箱中被标记为未经过身份验证。 (用小问号图标显示)。

这是我的代码:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require './PHPMailer/src/Exception.php';
require './PHPMailer/src/PHPMailer.php';
require './PHPMailer/src/SMTP.php';


$mail = new PHPMailer(TRUE);

try 
    $mail->setFrom('noreply@mydomain.com', 'My Domain');
    $mail->addAddress('me@gmail.com', 'Me');
    $mail->Subject = 'PHPMailer Test Message';
    $mail->ishtml(TRUE);
    $mail->Body = 'Test email';

    /*SMTP settings*/
    $mail->isSMTP();
    $mail->Host = 'smtp.ionos.co.uk';
    $mail->SMTPAuth = TRUE;
    $mail->SMTPSecure = 'tls';
    $mail->Username = 'noreply@mydomain.com';
    $mail->Password = 'myPassword';
    $mail->Port = 587;


    if(!$mail->send()) 
        echo 'Message was not sent.';
        echo 'Mailer error: ' . $mail->ErrorInfo;
     else 
        echo 'Message has been sent';
    


catch (Exception $e)

    echo $e->errorMessage();

catch (\Exception $e)

    echo $e->getMessage();

?>

有人知道为什么这封电子邮件仍然被标记吗? 我使用的是 PHPMailer 6.1,服务器运行的是 PHP 7.4

【问题讨论】:

您的域上是否正确设置了 SPF 和 DKIM? (即 smtp.ionos.co.uk 是否实际上被授权代表 noreply@mydomain.com 发送邮件?)请记住,SMTP 允许 任何人 像其他任何人 发送电子邮件,这就是 SPF+DKIM 的原因在今天非常重要:不仅对于垃圾邮件,而且对于防止网络钓鱼也是如此。 嗯,我希望因为电子邮件和域由同一提供商托管,我将被授权发送电子邮件,但我会检查 SPF+DKIM。谢谢! 您有权发送电子邮件,问题就在于此;每个人都被授权以任何人的身份发送电子邮件,接收服务器尝试使用 SPF 和 DKIM 设置验证发件人的身份。如果没有设置,任何人都可以使用您的电子邮件地址作为“FROM”标题。 【参考方案1】:

您必须允许 gmail 在您的 DNS 设置中使用 spf 条目来验证您的电子邮件。更多信息请参考谷歌文档:https://support.google.com/a/answer/33786

【讨论】:

【参考方案2】:

因此响应 cmets,我通过向我的域的 DNS 添加 SPF (TXT) 记录 解决了这个问题。主机字段设置为 @,权重设置为 Hardfail

感谢大家的帮助。

【讨论】:

奇怪的是,通过该设置,我现在可以发送被识别为经过身份验证的电子邮件,即使将“发件人:”标题编辑到我在其他提供商处拥有的电子邮件地址之一。这似乎使身份验证变得毫无意义?

以上是关于PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHPMailer 发送电子邮件时出现身份验证错误

php使用phpmailer类和smtp发送邮件

PHP(ThinkPHP5.0) + PHPMailer 进行邮箱发送验证码

使用 PHPMailer 通过 SMTP 发送电子邮件

如何在没有 SMTP 的情况下从 PHPMAILER 发送电子邮件

PHP下利用PHPMailer