我们有 Cpanel,可以使用“管道到程序”功能转发电子邮件。
货代示例:
Email Address Forward To
[email protected] |/home/user/forwarder/forward.php
[email protected] |/home/user/forwarder/forward.php
forward.php:
#!/usr/bin/php -q
<?php
$forwarders = [
'[email protected]' => ['[email protected]'],
'[email protected]' => ['[email protected]']
];
$recipients = $parseHeader['to'];
$to = [];
foreach($recipients as $recipient){
if(isset($forwarders[$recipient])){
foreach($forwarders[$recipient] as $forwarder){
$to[] = $forwarder;
}
}
}
//Send one email with emails in $to
假设我向“[email protected]”和“[email protected]”发送电子邮件,上述脚本将生成
$to
数据:
[
'[email protected]',
'[email protected]'
]
我们尝试创建一封包含相同收件人但带有转发电子邮件的转发电子邮件,以便将同一封电子邮件发送到“[电子邮件受保护]”和“[电子邮件受保护]”。
问题是两个收件人都会收到 2 封相同的电子邮件,如果有“[电子邮件受保护]”,则会发送 3 次......等等
我们尝试使用
To: [email protected]
和 CC: [email protected]
发送电子邮件,但发生了同样的事情。
场景:
是否可以避免这个问题?
就像 Alex 所说,您实际上应该转发电子邮件 - 大多数 MTA 都提供了重写发件人的机制(这在当今相当重要)。我还建议您停止使用 cpanel,除非您对 Exim 有特别的喜爱和技能,否则请尝试使用 Postfix。
最可能的原因是它在 Linux 上运行(你没有说),并且你通过 PHP 的“mail()”函数(同样,你没有说)调用旅程的下一步,而无需重写原始标题。在这种情况下,您的代码只需调用命令
sendmail -t -i
即可根据电子邮件中的标头确定收件人。与 SMTP 相反,收件人是在发送邮件标头和正文之前通过协商提供的。
重写标头并继续使用
mail()
或通过 SMTP 提交转发的消息或编写自己的包装器(例如)/usr/bin/mail