Using PHP's IMAP module with Gmail, how do I keep a script alive checking for emails every 5 seconds

Posted on 2014-12-01
Medium Priority
Last Modified: 2014-12-02
The code I've been using (snippet):

while(true) {

	$emails = imap_search($connection,'ALL');

	if($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



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
Question by:Mark
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
LVL 62

Expert Comment

ID: 40475275
You never check if connection is alive.

Author Comment

ID: 40475296
Could you supply the correct code then that checks as you mention and reconnects if necessary
LVL 62

Expert Comment

ID: 40475443
Add imap_open/imap_close in the loop
They are outside code presented, so I hold no chance to fix it.
Moving data to the cloud? Find out if you’re ready

Before moving to the cloud, it is important to carefully define your db needs, plan for the migration & understand prod. environment. This wp explains how to define what you need from a cloud provider, plan for the migration & what putting a cloud solution into practice entails.


Author Comment

ID: 40475792
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)
LVL 62

Expert Comment

ID: 40475832
if imap_check()
 ... do your loop
else imap_close/imap_open

Author Comment

ID: 40475873
I, what about imap_ping .. Any use with that in this instance
LVL 62

Accepted Solution

gheist earned 2000 total points
ID: 40476761
imap_check has same return semantics and updates mailbox status at the same time.
LVL 62

Expert Comment

ID: 40477532
if !(imap_check()) then
doyour loop

Featured Post

Video: Liquid Web Managed WordPress Comparisons

If you run run a WordPress, you understand the potential headaches you may face when updating your plugins and themes. Do you choose to update on the fly and risk taking down your site; or do you set up a staging, keep it in sync with your live site and use that to test updates?

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Working with spreadsheets can be a daunting task, especially when having to deal with large amounts of data. All you see are rows and rows of numbers and soon your eyes begin to glaze over. Take advantage of the tools in Google Sheets to create prof…
Learn about cloud computing and its benefits for small business owners.
This Micro Tutorial will demonstrate importing calendar invites from events such as webinars into your Google Calendar.
This Micro Tutorial will demonstrate how to analyze your website's back links using a network graph powered by a fusion table.
Suggested Courses

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question