Получение отскочившего электронного письма. Ошибка в скрипте
Я пытаюсь получить отправленную почту, проверяя текст сообщений, но по какой-то причине скрипт ничего не делает.
Я проверил всю документацию по этому вопросу и искал решение, но ничего не смог найти.
Я уверен, что некоторые из вас смогут определить, что я делаю неправильно.
Вот соответствующая часть кода.
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 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%, что действительно хорошо.
На мой взгляд, то, как вы это делаете - проверяете текст сообщения - намного более эффективный метод.
Надеюсь, это поможет.