获得退回的电子邮件。脚本出错

时间:2012-12-10 06:59:31

标签: php email imap

我正试图通过邮件检查邮件的正文,但由于某种原因,脚本什么都不做。

我检查了有关该主题的所有文档,并搜索了一个解决方案但找不到任何内容。

我相信你们中的一些人能够发现我做错了什么。

以下是代码的相关部分。

error_reporting( E_ALL ) ;

$POP3Box = imap_open( "{" . $Domain . ":110/pop3/novalidate-cert", $EmailBox, $EmailPass ) ;

if ( !$POP3Box ) :
  echo '<br /><div class="ErrorMessage"> Connection failed!<br /> Wrong Email address or Password! Please check and try again...</div><br /><br />' ;
  die ;
endif ;

$MessageQty = imap_num_msg( $POP3Box ) ;
echo 'Total messages in "' . $EmailBox . '" = ' . $MessageQty . '<br /><br />' ;
$MailNum = 1 ;
$MailOrder = 1 ;

while ( $MailNum <= $MessageQty ) {// GET MESSAGES
  $EmailBody = imap_fetchbody( $POP3Box, $MailNum, 1 ) ;

  if ( strrpos( $EmailBody, 'Undelivered Mail Returned to Sender' )) {
    imap_delete( $POP3Box, $MailNum ) ;
    $MailOrder++;
  }
  else {
    die ;
  }
  $MailNum++;
}

if ( $MailOrder > 1 )
  imap_expunge( $POP3Box ) ;

if ( $MailNum > 1 ) {
  echo 'No bounced messages found!<br />' ;
}
else {
  echo 'Empty mailbox!<br />' ;
}

1 个答案:

答案 0 :(得分:0)

我在脚本中发现了至少3个问题:

这是一个错误:}

后错过 ...novalidate-cert"

$POP3Box = imap_open( "{" . $Domain . ":110/pop3/novalidate-cert", $EmailBox, $EmailPass );

必须更改为:

$POP3Box = imap_open( "{" . $Domain . ":110/pop3/novalidate-cert"}, $EmailBox, $EmailPass );1

这是一个错误:缺少关闭命令。在expunge

之后添加此内容

imap_close( $POP3Box );

这是一个建议:要在正文中搜索的字符串不能只是Undelivered Mail Returned to Sender

有几条消息表示退回或退回的电子邮件。我建议替换这个:

if ( strrpos($EmailBody, 'Undelivered Mail Returned to Sender')) {加上像这样的正则表达式:

if ( preg_match( "([a-z0-9!#$%&'*+/=?^_ {|}〜 - ] +(?:!?[A-Z0-9#$%&安培;'* + / = ^ _ {|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)", $EmailBody, $BounceMatch )) {

检测所有退回的邮件几乎是不可能的,但使用正则表达式,您将能够接近95%,这非常好。

在我看来,你做这件事的方式 - 检查信息的正文 - 是迄今为止更有效的方法。

希望这有帮助。