Получение отскочившего электронного письма. Ошибка в скрипте


Я пытаюсь получить отправленную почту, проверяя текст сообщений, но по какой-то причине скрипт ничего не делает.

Я проверил всю документацию по этому вопросу и искал решение, но ничего не смог найти.

Я уверен, что некоторые из вас смогут определить, что я делаю неправильно.

Вот соответствующая часть кода.

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 />' ;
}
Author: Felipe Alameda A, 2012-12-10

1 answers

Я нашел по крайней мере 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%, что действительно хорошо.

На мой взгляд, то, как вы это делаете - проверяете текст сообщения - намного более эффективный метод.

Надеюсь, это поможет.

 0
Author: Felipe Alameda A, 2012-12-10 07:37:59