今天早些时候,我询问了有关从本地主机发送邮件的 postfix 和 spamassassin 的问题,postfix、垃圾邮件杀手、swiftmailer并很快得到了很好的答复(谢谢)。直接使用 sendmail 解决了速度问题,但出于其他原因,我想尝试使用 SMTP,因此我需要知道如何在连接客户端为 localhost 时阻止 postfix 将邮件转发到 spampd。目前,退回的邮件不是返回到 REPLY-TO 地址,而是返回到 Web 服务器管理员,我认为这是因为直接使用 sendmail。我的配置显示在前面的问题中,只是目前我已将邮件程序配置为
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SendmailTransport'
],
],
答案1
以下是我解决问题的方法。相关文档位于http://www.postfix.org/SMTPD_PROXY_README.html
/etc/postfix/master.cf 中有相关配置。
smtp inet n - y - 20 smtpd
-o smtpd_proxy_filter=127.0.0.1:10025
-o smtpd_client_connection_count_limit=10
127.0.0.1:10026 inet n - n - - smtpd
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=
-o mynetworks=127.0.0.0/8
-o receive_override_options=no_unknown_recipient_checks
这些定义了端口 10026 以接收来自邮件过滤器的输出,并由 postfix 的后过滤 SMTP 服务处理。我将配置设置为发送到端口 10026,SMTP 会立即处理电子邮件。
我已经使用不正确的电子邮件地址进行了测试,退回邮件被正确地发送到回复地址,而不是我的网络服务器管理员。
事实上,我很惊讶我找不到更多关于这个问题的讨论,但也许大多数服务器都有一个网站,所以网络服务器管理员与网站上的电子邮件发件人相同或相似。在我们的案例中,我们有大约 100 个不同的电子邮件发件人,因此他们获得自己的退回邮件非常重要。
这是我们现在使用的 Yii2 Swiftmailer 配置:
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => '127.0.0.1',
'port' => '10026'
]
],
这应该是显而易见的,但我要声明的是,防火墙上未打开端口 10026,因此只有本地主机可以使用该端口。