2

メッセージの本文をチェックするバウンスメールを取得しようとしていますが、何らかの理由でスクリプトは何もしません。

このテーマに関するすべてのドキュメントを確認し、解決策を検索しましたが、何も見つかりませんでした。

私が間違っていることをあなた方の何人かが発見できると確信しています。

これがコードの関連部分です。

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 />' ;
}
4

1 に答える 1

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%近くをキャッチできるようになります。これは非常に優れています。

私の意見では、あなたがそれをしている方法-メッセージの本文をチェックする-ははるかに効果的な方法です。

お役に立てれば。

于 2012-12-10T07:37:59.160 に答える