Mark
asked on
Using PHP's IMAP module with Gmail, how do I keep a script alive checking for emails every 5 seconds
The code I've been using (snippet):
The code works when left on for a few hours however I left it on this weekend and when I came back, it wasn't obtaining new emails (it just kept outputting "No New Emails"). When I restarted the script, it started working property...
Please advise, thanks
while(true) {
imap_check($connection);
$emails = imap_search($connection,'ALL');
if($emails) {
rsort($emails);
foreach($emails as $email_number) {
$overview = imap_fetch_overview($connection, "{$email_number}:{$email_number}");
$headers = imap_header($connection, $email_number);
$replyto = $headers->reply_toaddress;
$subject = $headers->Subject;
#........ code to delete email and a bunch more lines
}
}
else echo "No New Emails\n";
imap_gc($connection, IMAP_GC_ELT); # Clear Cache
sleep(5);
}
The code works when left on for a few hours however I left it on this weekend and when I came back, it wasn't obtaining new emails (it just kept outputting "No New Emails"). When I restarted the script, it started working property...
Please advise, thanks
You never check if connection is alive.
ASKER
Could you supply the correct code then that checks as you mention and reconnects if necessary
Add imap_open/imap_close in the loop
They are outside code presented, so I hold no chance to fix it.
They are outside code presented, so I hold no chance to fix it.
ASKER
I already have imap_open but at the beginning of the script before the infinite loop begins. I don't have an imap_close tag anywhere because I want to connection to remain alive.
I don't want the script to have to reconnect to gmail's servers every 5 seconds as it will slow its performance down. The way I have it now, it works well however after a few hours it stops working (I was even going to add a while ($loopCount<x) but that doesn't seem like the right way togo.
I assumed when building the script that imap_search would throw an error of it's no longer connected to a the server but that doesn't seem to be the case (or gmail has some sort of limits)
I don't want the script to have to reconnect to gmail's servers every 5 seconds as it will slow its performance down. The way I have it now, it works well however after a few hours it stops working (I was even going to add a while ($loopCount<x) but that doesn't seem like the right way togo.
I assumed when building the script that imap_search would throw an error of it's no longer connected to a the server but that doesn't seem to be the case (or gmail has some sort of limits)
if imap_check()
... do your loop
else imap_close/imap_open
... do your loop
else imap_close/imap_open
ASKER
I, what about imap_ping .. Any use with that in this instance
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
if !(imap_check()) then
reconnect
fi
doyour loop
reconnect
fi
doyour loop