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 仍然声称它无法验证发件人的主要内容,如果未能解决你的问题,请参考以下文章
PHP(ThinkPHP5.0) + PHPMailer 进行邮箱发送验证码