代表用户发送邮件,处理无效地址



我设置了一个web应用程序,允许订阅者从我的系统发送电子邮件给他们的客户。为此,我利用PHPMailer

ReplyTo

函数。MyWebApp.com

From: noreply@MyWebApp.com
ReplyTo: subscriber@remotedomain.com
To: customer@yahoo.com

这意味着从我们的系统发送的所有电子邮件通过所有垃圾邮件过滤器,并以高准确率交付。这似乎满足了订阅者的需求,因为如果客户点击"回复",-直接回复订阅者:subscriber@remotedomain.com

。我发现,如果订阅者输入了无效的电子邮件地址,那么当真正需要了解问题的是订阅者时,邮件传递系统故障通知发送到noreply@MyWebApp.com而不是订阅者subscriber@remotedomain.com

是否有任何方法,使用我的设置,我可以强制邮件传递系统故障通知转到预期的收件人?

是。反弹被(或至少应该)发送到SMTP信封发件人,这是MAIL FROMSMTP命令中使用的地址,它不一定与消息头中的From地址相同。在PHPMailer中,默认情况下使用from地址(因为这是大多数人想要的),但您可以使用Sender属性覆盖它。你可以这样使用它:

$mail->setFrom('noreply@MyWebApp.com');
$mail->addReplyTo('subscriber@remotedomain.com');
$mail->addAddress('customer@yahoo.com');
$mail->Sender = 'subscriber@remotedomain.com';

说起来和做起来都很简单,然而,它也直接进入了SPF所依赖的机制。SPF对信封发送者进行匹配,而不是从地址(这是DMARC桥接的差距),因此为了使其工作,您需要您的客户将您的服务器添加到他们域的SPF记录中。这可能很棘手。

一个不会遇到SPF问题的替代方法是接受您代表他们发送的消息的反弹,并将它们从您的服务器转发给他们,而不是让收件人的服务器这样做。但是要注意,编写弹出处理程序是非常不愉快的!