我正在使用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,似乎是定位一个交付错误?但不是为了将消息发送到反弹邮件帐户?
是的,这很正常。当通过Gmail的SMTP服务器发送电子邮件时,它会强制返回路径为您发送的帐户。
您唯一的解决方案是搜索允许您设置返回路径的提供商。
这不是gmail问题,而是SMTP规范的要求,如RFC 5321第4.4节:中所定义
源自SMTP系统的邮件不应发送已包含"返回路径"标头字段的邮件。
它还说,虽然SMTP系统根本不应该检查邮件内容(即,它们不查看邮件头),但从其他上下文到SMTP的网关应该删除任何返回路径的邮件头。简而言之,如果您自己添加了一个返回路径头,那么您就做错了。
您在收到的邮件中看到的返回路径标头是由接收方创建的,而不是由发送方创建的,它源自用于传递邮件的SMTP MAIL FROM
命令。此地址无需与消息中的From地址标头有任何共同之处,并指定在传递失败时应将消息发送到的位置,即您想要的VERP地址。
我不知道SwiftMailer,但在PHPMailer中,您可以通过设置Sender
属性来设置SMTP信封发件人的值,接收方将在接收时将其转换为返回路径邮件头。