使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件

Posted

技术标签:

【中文标题】使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件【英文标题】:Using PHP Mailer to send smtp emails from an email address outside the local server 【发布时间】:2017-06-30 08:00:52 【问题描述】:

我想使用 phpMailer 为我的网站配置联系页面。我面临的问题是,要使脚本正常工作,必须在本地服务器中设置 from 地址,例如如果我的域是 example.com,则发件人地址必须是 name@example.com。当我以这种方式设置时,脚本可以完美运行。 我遇到的问题是作为一个联系页面,发件人地址必须是发件人的电子邮件地址,这意味着如果客户使用 name@email.com 之类的电子邮件地址与我联系,脚本将引发错误类似于下面的:

SMTP ERROR: DATA END command failed:
550-Your FROM address ( name@email.com , Dev Customer 550-)
must match your authenticated email user ( name@example.com ).

有没有人知道如何解决这个问题?或者有其他选择吗?我将不胜感激所提供的任何形式的帮助。提前谢谢你。

【问题讨论】:

这取决于电子邮件服务器配置。与管理它的人交谈或找到另一个人。 您可以使用reply-to 标头并将from 设置为本地电子邮件,例如(在您的示例中)noreply@example.com @Tigger 当我在标题中使用reply-to 时,它仍然回复from 地址 正确的语法应该是Reply-To: your@email.comReply-to: you@email.com。我可能用小写的r 把你扔了。请参阅:What is the behavior difference between return-path, reply-to and from? 了解更多信息。 我认为最简单的方法就是使用外部 SMTP 服务器。我使用smtp2go.com - 每个月最多可以免费发送 1000 封邮件。完美运行。 【参考方案1】:

根据 Tigger 的建议,您应该永远使用提交者的地址作为发件人地址发送。它是伪造的,并且会使您的邮件无法通过 SPF 检查,从而导致邮件弹跳或寄往垃圾邮件文件夹的无休止的传递问题。无论如何,至少十年来它一直被积极反对,这也是导致您容易受到 PHPMailer 中在 12 月修复的安全漏洞的影响的做法之一。

既然你已经用 PHPMailer 标记了它,我将展示如何使用它来完成你的要求:

$mail->setFrom('me@example.com', 'Contact form');
$mail->addReplyTo($_POST['email'], $_POST['name']);

这正是the example contact form script provided with PHPMailer 所做的。检查提交的值也是值得的 - addReplyTo 将自动验证地址,因此您应该检查返回值以确定。

可能有一些电子邮件客户端无法正确处理回复地址,但您不应该因为少数客户端的无能而将自己暴露在黑名单中。

【讨论】:

以上是关于使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 从服务发送电子邮件

使用配置 PHP 文件和 PHP Mailer 将电子邮件发送到多个地址

使用 Swift Mailer、GMail 和 PHP 发送电子邮件,权限被拒绝错误

Mercury:从本地主机发送电子邮件

通过 Microsoft 365 SMTP 发送电子邮件时如何使用自定义显示名称? (以 PHP Swift Mailer 为例)

Django - 使用 django-mailer 发送批量邮件