• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 142
  • Last Modified:

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):

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);

}

Open in new window


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
0
Mark
Asked:
Mark
  • 5
  • 3
1 Solution
 
gheistCommented:
You never check if connection is alive.
0
 
MarkProgrammerAuthor Commented:
Could you supply the correct code then that checks as you mention and reconnects if necessary
0
 
gheistCommented:
Add imap_open/imap_close in the loop
They are outside code presented, so I hold no chance to fix it.
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
MarkProgrammerAuthor Commented:
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)
0
 
gheistCommented:
if imap_check()
 ... do your loop
else imap_close/imap_open
0
 
MarkProgrammerAuthor Commented:
I, what about imap_ping .. Any use with that in this instance
0
 
gheistCommented:
imap_check has same return semantics and updates mailbox status at the same time.
0
 
gheistCommented:
if !(imap_check()) then
 reconnect
fi
doyour loop
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now