我有同样的问题,确切的情况。默认情况下,我的邮件服务器会将我所有返回的邮件发送到最初发送邮件的同一帐户,并自动发送 msg "Mail delivery failed: returned message to sender"。
我真的不想知道它为什么被退回,有这么多邮件交易,我只想删除坏的。没有时间检查特定规则,例如是否存在,不可用等,,,只想标记删除并继续。
退回邮件非常简单,因为您需要处理许多不同的服务器和响应类型。每个反垃圾邮件软件或操作系统方案都可以通过退回的电子邮件发送不同的错误代码。
如果您想设置 IMAP ,我建议您阅读并下载处理退回电子邮件的固定调试版本- 使用来自 KIDMOSES的 PHPMAILER-BMH 和 AUTHSMTP http://www.kidmoses.com/blog-article.php?bid=40并发送您自己的自定义标头,将它们发送到您的bounce@domain.com,然后交叉手指查看脚本是否捕获了您在退回邮件中发送的标头。我试过了,有效。
但是,如果您想按照我的快速简便的解决方案解决我的问题,这里就是秘密。
1 - 从 KIDMOSES 网站或我的网站下载更好的版本,以防 KIDMOSES 想搬到其他地方http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip
2 - 包含返回邮件文本的变量是 $body ,它本身包含错误的返回电子邮件(所以它是一个多维数组)。(还包含您的服务器邮件和其他 DNS 邮件内容,但我们正在寻找 BAD MAIL BOUNCED。
3 - 由于您的 OWN SERVICE 正在向您发送退回的电子邮件,因此它不太可能更改其格式和自己的标题,发送退回的电子邮件,因此您可以安全地选择退回的电子邮件数组返回的顺序。在我的情况下,总是相同的格式模板。(除非您更改系统或提供商)
4 - 我们查看$body并搜索所有电子邮件字符串变量并将它们提取到一个名为 $matches的二维数组中
5 - 我们通过使用print_r(array_values($matches))打印数组来选择数组位置;
6 - 这是您需要修改的代码。它来自class.phpmailer-bmh.php文件的第 500 行左右
// process bounces by rules
$result = bmhDSNRules($dsn_msg,$dsn_report,$this->debug_dsn_rule);
} elseif ($type == 'BODY') {
$structure = imap_fetchstructure($this->_mailbox_link,$pos);
switch ($structure->type) {
case 0: // Content-type = text
$body = imap_fetchbody($this->_mailbox_link,$pos,"1");
$result = bmhBodyRules($body,$structure,$this->debug_body_rule);
//MY RULE IT WORKS at least on my return mail system..
$pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
preg_match_all($pattern, $body, $matches);
//print_r( array_values( $matches )); //To select array number of bad returned mail desired, usually is 1st array $matches[0][0]
echo "<font color = red>".$matches[0][0]."</font><br>";
break;
因此,我们忘记了返回的标头并专注于糟糕的电子邮件。你可以超越它们,你可以使用 MySQL,或者处理任何你想做的事情。
重要
注释在示例目录中的 callback_echo.php 中的回声,否则您会在打印之前得到所有垃圾。
function callbackAction ($msgnum, $bounce_type, $email, $subject, $xheader, $cheader, $remove, $rule_no=false, $rule_cat=false, $rule_msg='', $totalFetched=0) {
$displayData = prepData($email, $bounce_type, $remove);
$bounce_type = $displayData['bounce_type'];
$emailName = $displayData['emailName'];
$emailAddy = $displayData['emailAddy'];
$remove = $displayData['remove'];
//echo "<br>".$msgnum . ': ' . $rule_no . ' | ' . $rule_cat . ' | ' . $bounce_type . ' | ' . $remove . ' | ' . $email . ' | ' . $subject . ' | ';
//echo 'Custom Header: ' . $cheader . " | ";
//echo 'Bounce Message: ' . $rule_msg . " | ";
return true;
}
我的输出
Connected to: mail.chasqui.market (bounce@chasqui.market)
Total: 271 messages
Running in disable_delete mode, not deleting messages from mailbox
kty2001us@starmedia.com
...
entv@nuevoface.com
Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved