【问题标题】:Using PHP Mailer to send smtp emails from an email address outside the local server使用 PHP Mailer 从本地服务器外部的电子邮件地址发送 smtp 电子邮件
【发布时间】: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 封邮件。完美运行。

标签: php email phpmailer


【解决方案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 将自动验证地址,因此您应该检查返回值以确定。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多