我正试图通过邮件检查邮件的正文,但由于某种原因,脚本什么都不做。
我检查了有关该主题的所有文档,并搜索了一个解决方案但找不到任何内容。
我相信你们中的一些人能够发现我做错了什么。
以下是代码的相关部分。
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 />' ;
}
答案 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%,这非常好。
在我看来,你做这件事的方式 - 检查信息的正文 - 是迄今为止更有效的方法。
希望这有帮助。