Imap und Pop3 Problem
Ich habe ein script das alle imap konten aufruft (mit cron job alle 2 Minuten) und mit Filtern nach spam durchsucht,leider hängt sich imap service jedesmal auf. Wer kann mir damit helfen? Kann ich das auf pop3 ändern?
hier das script:
<?
set_time_limit(0);
require('include/common.php');
$server='{'.$host.':143/imap}';
function getHeaders($mbox, $min, $max){
$overview = imap_fetch_overview($mbox,"$min:$max",0);
if(is_array($overview)){
reset($overview);
$count = 1;
while( list($key,$val) = each($overview)){
$time = strtotime ( $val->date );
if($TIME_ONLY_OPTION){
$now = date($DEFAULT_TIME_FORMAT_SHORT, time() );
$then = date($DEFAULT_TIME_FORMAT_SHORT, $time );
if($now == $then){
$time = date($DEFAULT_TIME_FORMAT_TIMEONLY, $time );
}else{
$time = date($DEFAULT_TIME_FORMAT, $time );
}
}else{
$time = date($DEFAULT_TIME_FORMAT, $time );
}
$header[$count][0] = $time;
$header[$count][1] = $val->from;
$header[$count][2] = $val->subject;
$header[$count][4] = $val->seen;
$header[$count][5] = $val->size;
$header[$count++][6] = $val->uid;
}
}
return $header;
}
echo "Launching e-mail filter ... Running init<br>";
echo "Initialising database ...";
$qr1 = mysql_query('select * from users where 1');
while($user = mysql_fetch_object($qr1) ){
$userid = $user->uid;
echo " Ok , found userid = ".$userid." <br>";
echo "Connecting to POP3 server ...";
echo $user->username." , ".$user->password." <br>";
$mbox = imap_open($server,$user->username."@".$domain,$user->password );
echo imap_last_error();
if ($mbox!=false){
echo "done.<br>";
echo " Ok , found userid = ".$userid." <br>";
echo "Counting messages ...";
$msgnum=imap_num_msg($mbox);
$header=getHeaders($mbox,0,$msgnum);
echo "done.<br>";
echo 'MSGNUM : '.$msgnum."<br>";
for ($i=1; $i<=$msgnum; $i++){
$subject=$header[$i][2];
$seen=$header[$i][4];
$uid=$i;
echo $uid."<br>";
$head= imap_fetchheader($mbox,$uid , 0);
$h=imap_headerinfo($mbox,$uid, 250, 250);
$from=$h->from;
$to=$h->to;
$subject=$h->fetchsubject;
echo "Subject : ".$subject."<br>";
if( sizeof($from) ){
foreach ($from as $id => $object){
$fromaddress = $object->mailbox . "@" . $object->host;
}
}
$toaddress=$user->email;//$user->username."@".$domain;
echo $uid.' : '.$fromaddress."<br>";
echo $uid.' : '.$toaddress."<br>";
$body=imap_body($mbox, $uid, FT_INTERNAL);
$query='select * from emails where ((user='.$userid.')and(email like "%'.strtolower($fromaddress).'"))';
$q = mysql_query($query); //((strtolower($fromaddress)!=strtolower('MAILER-DAEMON@yoursite.com'))
$ppp=false;
$pos = strpos(strtolower($fromaddress),strtolower('@'.$surl.'.com'));
if ($pos === false) $ppp=true;
if (strtolower($fromaddress)==strtolower($user.'@'.$surl.'.com')) $ppp=true;
if (($ppp)){
if ( mysql_num_rows($q)>0){
$qa = mysql_fetch_object($q);
if ($qa->action==2){
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [blocked mail address] <br> ";
}
}else{
$qa = mysql_query('select * from filters where user='.$userid);
$action=3;
while ( $q = mysql_fetch_object($qa) ){
if ($q->field==1){
$pos = strpos(strtolower($subject), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==2){
$pos = strpos(strtolower($fromaddress), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==3){
$pos = strpos(strtolower($toaddress), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==4){
$pos = strpos(strtolower($body), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}
}
$confmessage = "Diese Nachricht erhalten sie automatisch!\r\n\r\nDer Empfänger {email} ist Mitglied von www.Spam-Schutz.net, melden Sie sich auch kostenlos bei www.Spam-Schutz.net an und blocken sie 99,9% aller Viren und Spam Mails. \r\n\r\nUm Ihre Nachricht weiter zu leiten, bitten wir Sie den folgenden Link zu bestätigen, sofort nach ihrer Bestätigung wird ihre Nachricht an {email} gesendet. \r\n{code}\r\n\r\n http://www.spam-schutz.net\r\n";
if ($action==3){
$vermessage=$confmessage;
$vermessage=str_replace("{sitename}",$sitename,$vermessage);
$vermessage=str_replace("{email}",$toaddress,$vermessage);
$vermessage=str_replace("{fullname}",$fullname,$vermessage);
$vermessage=str_replace("{subject}",$subject,$vermessage);
$vercode=$fromaddress;
$vercode .= chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(9 7,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).ch r(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97, 122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr( rand(97,122)).chr(rand(97,122));
$vercode.=$toaddress;
$vermessage=str_replace("{code}",$siteurl.'/verify.php?code='.$vercode,$vermessage);
list($pending) = mysql_fetch_array( mysql_query("select COUNT(*) from pemails where frome='$fromaddress' and user='$userid'") );
if ( $pending > 0 ){
// already added
}else{
wrapmail($fromaddress,'Die Nachricht muss bestätigt werden '.$toaddress,$vermessage,"From: $fullname <$toaddress>");
echo "Bestätigungs Nachricht gesendet<br>";
}
mysql_query('insert into pemails VALUES (NULL, '.$userid.', \''.addslashes($subject).'\', \''.addslashes($head).'\', \''.addslashes($body).'\', \''.addslashes($vercode).'\' , \''.$fromaddress.'\')');
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [sent to pending emails ] <br> ";
}else if ($action==2){
//cannot send message
$cantmessage = "----- The following addresses had permanent fatal errors -----\r\n{toemail} (Reason: 550 5.2.1. {toemail}... Mailbox disabled, not accepting messages)\r\n\r\n\r\n550 5.1.1. {toemail} ... User unknown\r\n";
$cantfrom=$adminemail;
$cantmessage=str_replace("{toemail}",$toaddress,$cantmessage);
wrapmail($fromaddress,"Returned mail: see transcript for details",$cantmessage,"From: $adminemail");
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [filter detected block phrase] <br>";
echo " To : ".$fromaddress."<br>";
}else if($action==1){
//afdasfdsafds
}
}//endelse
}
}
imap_close($mbox);
}
}
?>
Ich habe ein script das alle imap konten aufruft (mit cron job alle 2 Minuten) und mit Filtern nach spam durchsucht,leider hängt sich imap service jedesmal auf. Wer kann mir damit helfen? Kann ich das auf pop3 ändern?
hier das script:
<?
set_time_limit(0);
require('include/common.php');
$server='{'.$host.':143/imap}';
function getHeaders($mbox, $min, $max){
$overview = imap_fetch_overview($mbox,"$min:$max",0);
if(is_array($overview)){
reset($overview);
$count = 1;
while( list($key,$val) = each($overview)){
$time = strtotime ( $val->date );
if($TIME_ONLY_OPTION){
$now = date($DEFAULT_TIME_FORMAT_SHORT, time() );
$then = date($DEFAULT_TIME_FORMAT_SHORT, $time );
if($now == $then){
$time = date($DEFAULT_TIME_FORMAT_TIMEONLY, $time );
}else{
$time = date($DEFAULT_TIME_FORMAT, $time );
}
}else{
$time = date($DEFAULT_TIME_FORMAT, $time );
}
$header[$count][0] = $time;
$header[$count][1] = $val->from;
$header[$count][2] = $val->subject;
$header[$count][4] = $val->seen;
$header[$count][5] = $val->size;
$header[$count++][6] = $val->uid;
}
}
return $header;
}
echo "Launching e-mail filter ... Running init<br>";
echo "Initialising database ...";
$qr1 = mysql_query('select * from users where 1');
while($user = mysql_fetch_object($qr1) ){
$userid = $user->uid;
echo " Ok , found userid = ".$userid." <br>";
echo "Connecting to POP3 server ...";
echo $user->username." , ".$user->password." <br>";
$mbox = imap_open($server,$user->username."@".$domain,$user->password );
echo imap_last_error();
if ($mbox!=false){
echo "done.<br>";
echo " Ok , found userid = ".$userid." <br>";
echo "Counting messages ...";
$msgnum=imap_num_msg($mbox);
$header=getHeaders($mbox,0,$msgnum);
echo "done.<br>";
echo 'MSGNUM : '.$msgnum."<br>";
for ($i=1; $i<=$msgnum; $i++){
$subject=$header[$i][2];
$seen=$header[$i][4];
$uid=$i;
echo $uid."<br>";
$head= imap_fetchheader($mbox,$uid , 0);
$h=imap_headerinfo($mbox,$uid, 250, 250);
$from=$h->from;
$to=$h->to;
$subject=$h->fetchsubject;
echo "Subject : ".$subject."<br>";
if( sizeof($from) ){
foreach ($from as $id => $object){
$fromaddress = $object->mailbox . "@" . $object->host;
}
}
$toaddress=$user->email;//$user->username."@".$domain;
echo $uid.' : '.$fromaddress."<br>";
echo $uid.' : '.$toaddress."<br>";
$body=imap_body($mbox, $uid, FT_INTERNAL);
$query='select * from emails where ((user='.$userid.')and(email like "%'.strtolower($fromaddress).'"))';
$q = mysql_query($query); //((strtolower($fromaddress)!=strtolower('MAILER-DAEMON@yoursite.com'))
$ppp=false;
$pos = strpos(strtolower($fromaddress),strtolower('@'.$surl.'.com'));
if ($pos === false) $ppp=true;
if (strtolower($fromaddress)==strtolower($user.'@'.$surl.'.com')) $ppp=true;
if (($ppp)){
if ( mysql_num_rows($q)>0){
$qa = mysql_fetch_object($q);
if ($qa->action==2){
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [blocked mail address] <br> ";
}
}else{
$qa = mysql_query('select * from filters where user='.$userid);
$action=3;
while ( $q = mysql_fetch_object($qa) ){
if ($q->field==1){
$pos = strpos(strtolower($subject), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==2){
$pos = strpos(strtolower($fromaddress), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==3){
$pos = strpos(strtolower($toaddress), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}else if ($q->field==4){
$pos = strpos(strtolower($body), strtolower($q->value));
if (!($pos === false)){
$action=$q->atype;
break;
}
}
}
$confmessage = "Diese Nachricht erhalten sie automatisch!\r\n\r\nDer Empfänger {email} ist Mitglied von www.Spam-Schutz.net, melden Sie sich auch kostenlos bei www.Spam-Schutz.net an und blocken sie 99,9% aller Viren und Spam Mails. \r\n\r\nUm Ihre Nachricht weiter zu leiten, bitten wir Sie den folgenden Link zu bestätigen, sofort nach ihrer Bestätigung wird ihre Nachricht an {email} gesendet. \r\n{code}\r\n\r\n http://www.spam-schutz.net\r\n";
if ($action==3){
$vermessage=$confmessage;
$vermessage=str_replace("{sitename}",$sitename,$vermessage);
$vermessage=str_replace("{email}",$toaddress,$vermessage);
$vermessage=str_replace("{fullname}",$fullname,$vermessage);
$vermessage=str_replace("{subject}",$subject,$vermessage);
$vercode=$fromaddress;
$vercode .= chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(9 7,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).ch r(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97, 122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr(rand(97,122)).chr( rand(97,122)).chr(rand(97,122));
$vercode.=$toaddress;
$vermessage=str_replace("{code}",$siteurl.'/verify.php?code='.$vercode,$vermessage);
list($pending) = mysql_fetch_array( mysql_query("select COUNT(*) from pemails where frome='$fromaddress' and user='$userid'") );
if ( $pending > 0 ){
// already added
}else{
wrapmail($fromaddress,'Die Nachricht muss bestätigt werden '.$toaddress,$vermessage,"From: $fullname <$toaddress>");
echo "Bestätigungs Nachricht gesendet<br>";
}
mysql_query('insert into pemails VALUES (NULL, '.$userid.', \''.addslashes($subject).'\', \''.addslashes($head).'\', \''.addslashes($body).'\', \''.addslashes($vercode).'\' , \''.$fromaddress.'\')');
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [sent to pending emails ] <br> ";
}else if ($action==2){
//cannot send message
$cantmessage = "----- The following addresses had permanent fatal errors -----\r\n{toemail} (Reason: 550 5.2.1. {toemail}... Mailbox disabled, not accepting messages)\r\n\r\n\r\n550 5.1.1. {toemail} ... User unknown\r\n";
$cantfrom=$adminemail;
$cantmessage=str_replace("{toemail}",$toaddress,$cantmessage);
wrapmail($fromaddress,"Returned mail: see transcript for details",$cantmessage,"From: $adminemail");
imap_delete ($mbox, $uid, 0);
imap_expunge($mbox);
echo "message $uid deleted [filter detected block phrase] <br>";
echo " To : ".$fromaddress."<br>";
}else if($action==1){
//afdasfdsafds
}
}//endelse
}
}
imap_close($mbox);
}
}
?>