我使用 Magento 和 Wordpress 分别使用 Sendmail 和 PHPmailer 发送 webapp 生成的邮件。有时,有人会输入错误的电子邮件地址,邮件(比如购买收据)会反弹到脚本指定的返回路径。
我不想为每个虚拟主机设置返回路径,特别是因为它不是容易地 完毕。理想情况下,WP 会使用博客管理员的地址,而 Magento 会使用指定的众多电子邮件字段之一,但它们默认使用 username@machinename(在我的情况下,username 是系统用户,machinename 是 FQDN,但它与实际的 vhost FQDN 不同)。结果是退回的邮件返回到服务器,并且由于服务器仅用于出站 SMTP,因此邮件停留在那里,未送达,更糟的是,未读。
我在 CentOS 6.3 上安装了 Postfix 2.6.6,是否可以全局强制服务器上通过 PHP 发送的所有消息使用特定的返回路径?
答案1
听起来你需要做的就是Sender
为你的 phpmailer 设置属性。官方文档说这$Sender
是一个公共财产,没有默认值,并且它......
设置邮件的发件人电子邮件(返回路径)。如果不为空,将通过 -f 发送到 sendmail 或在 smtp 模式下作为“MAIL FROM”发送。
像这样吗?
$phpmailer->Sender = "[email protected]";
或者,如果您希望所有脚本都有一个通用的返回路径,您可以修改 phpmailer 类本身,并将默认发件人设置为不是为空白,或者创建一个将其设置为该值的包装类。
为 PHP 设置全局值是不可行的,因为没有什么可以阻止您打开远程 SMTP 服务器的套接字并直接发送电子邮件。并且没有什么可以阻止您连接到localhost:25
并使用与您尝试使用的不同的 Return-Path 发送邮件。或者sendmail
直接调用二进制文件。发送电子邮件的方法有很多种(phpmailer 只是其中一种),而全局设置是不可行的。您能做的最好的事情就是确保正确配置您正在使用的方法。
答案2
找到解决方案!在 @Dom 和 @Oguz 的回答的帮助下这个问题,我在 中创建了条目sender_canonical_maps
。
这name
地图的一部分是每个用户名(这对应于先前设置中不受欢迎的 user@machinename 中的 user@ 部分,因为 postfix 默认不使用发件人规范映射)和该maps to
部分是电子邮件地址喜欢[电子邮件保护],[电子邮件保护],[电子邮件保护], ETC
这是重要的是,地址 bounces-user@ 不存在于目标域中的邮箱中。如果该地址存在,某些邮件服务提供商(例如 Google Apps)会将该电子邮件归类为垃圾邮件因为它知道你没有发送电子邮件(记住电子邮件是由某个服务器上的 Web 应用程序生成的),将其称为假反弹,这是垃圾邮件发送者使用的一种技巧。因此,您需要为 mymaindomain.com 的邮件服务打开 catchall,或者您需要为[电子邮件保护],[电子邮件保护],[电子邮件保护], ETC
注意我没有为每个域创建不同的映射喜欢[电子邮件保护],[电子邮件保护],[电子邮件保护]。只有当您知道 bounces@ 不存在于每个域中,并且它们已创建 catchall 或 bounces@ 的别名时,您才能执行此操作。对每个域执行此操作工作量太大,因此下一步是在 @mymaindomain.com 中创建规则(或用谷歌地图的说法是过滤器),以将每个退回通知消息重定向到域 A、域 B、域 C 等上的适当人工接收者。
这是我能想到的最好的解决方案。如果你有数百个域名,这可能会变得难以管理,但对我来说没问题。
我希望这有帮助