我曾经遇到过同样的问题,情况完全一样。默认情况下,我的邮件服务器会将所有退回的邮件发送到与原始发件人相同的帐户,并自动发送消息"Mail delivery failed: returning message to sender"。
我并不想知道为什么它被退回了,因为我有很多邮件交易,只想删除坏的邮件。没有时间检查特定的规则,例如不存在、不可用等,只想标记为删除并继续进行。
退信邮件非常琐碎,因为您需要处理许多不同的服务器和响应类型。每个反垃圾软件或操作系统方案都可以发送不同的错误代码与退回的电子邮件。
如果您想设置IMAP并发送自己的自定义标题,请将其发送到您的bounce@domain.com,然后祈祷脚本是否捕获您在退回的邮件中写入的标题,我建议您阅读并下载KIDMOSES的这个已修复调试版本的Handling Bounced Email - USING PHPMAILER-BMH AND AUTHSMTP,链接在这里http://www.kidmoses.com/blog-article.php?bid=40。我尝试过,它有效。
但是,如果您想要遵循我的快速简易修复方法来解决问题,这里有一个秘诀。
1- 从KIDMOSES网站或我的网站下载更好的版本,以防万一KIDMOSES想要移动到其他地方 http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip
2- 包含返回邮件文本的变量是 $body,它本身包含错误的返回电子邮件(因此它是一个多维数组)。 (还包括您的服务器邮件和其他DNS邮件内容,但我们正在寻找错误的邮件反弹。)
3- 由于您自己的服务向您发送反弹的电子邮件,因此不太可能更改其格式和自己的标题,发送反弹的电子邮件,因此您可以安全地选择返回的反弹电子邮件数组的顺序。 在我的情况下,始终是相同的格式模板。(除非您更改系统或提供程序)
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;
所以我们忘记返回的头部,专注于错误的电子邮件。您可以使用Excel处理它们,也可以使用MySQL处理,或者根据您想要做的任何操作进行处理。
重要提示
在示例目录中的callback_echo.php文件中注释掉echo语句,否则会打印出所有的垃圾信息。
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'];
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