我正在使用Swift Mailer检查退回邮件。我为退回邮件创建了一个单独的帐户,但是当我设置返回路径时,它不允许将退回邮件发送到该帐户。这是正常还是代码错误?
$verp = 'bounces-' . str_replace('@', '=', $row['ReplyTo']) . '@gmail.com';
$message = Swift_Message::newInstance()
->setSubject($row['Subject'])
->setFrom(array($row['ReplyTo'] => $row['FromName']))
->setReturnPath($verp)
->setBody($html, 'text/html')
->addPart($txt, 'text/plain');
我现在正在使用VERP,它似乎是找到一个传递错误?但是不是要将邮件发送到退回邮件帐户?
答案 0 :(得分:5)
是的,这是正常的。通过Gmail的SMTP服务器发送电子邮件时,它会强制将返回路径作为您发送的帐户。
您唯一的解决方案是搜索允许您设置返回路径的提供程序。
答案 1 :(得分:2)
这不是gmail问题,它是SMTP规范的要求,如RFC 5321 section 4.4中所定义:
发起消息的SMTP系统不应发送已包含返回路径标头字段的消息。
它还说虽然SMTP系统根本不应该检查消息内容(即它们不查看标题),但是从某个其他上下文到SMTP 应该的网关会删除任何返回路径头。简而言之,如果你自己添加一个返回路径标题,那你就错了。
您在收到的消息中看到的返回路径标头由接收方创建,不发送方,并且是从用于传递消息的SMTP MAIL FROM
命令派生的。该地址不需要与消息中的From地址头有任何共同之处,并指定在发送失败时应将消息发送到的位置,即您想要VERP地址的位置。
我不了解SwiftMailer,但在PHPMailer中,您可以通过设置Sender
属性来设置SMTP信封发件人值,接收者会在接收时将其转换为返回路径邮件头。