Skip to content

Reading emails from gmail using PHP & IMAP

Last updated on November 24, 2014

Recently i have worked on language translation project for that i need to read emails using PHP From the gamil inbox based on the email content i had created projects in the database…fortunately reading email from the gmail was easier than i think thanks to IMAP extension.

Here is the simple example for retrieving emails from the gmail:

NOTE: This will work only if you meet the fallowing requirements

  • PHP version should be PHP5 or latest
  • PHP IMAP Extension should be enabled in your PHP installation
  • IMAP should be enabled in your Gmail settings.

How to enable IMAP in PHP

How to Enable IMAP in XAMPP

IMAP is not enabled by default in Xampp distribution, so to enable it go to the file "\xampp\php\php.ini" and search for ";extension=php_imap.dll" and by removing the beginning semicolon at the line ,it’s get enabled ,it should be: extension=php_imap.dll.

How to enable IMAP in Linux

You can install the PHP5 IMAP module with this command :

apt-get install php5-imap

However it’s not enabled by default so enable it with:

php5enmod imap

To see the changes ,restart Apache

service apache2 restart

Here is the PHP script for retrieve Your Gmail Emails Using IMAP.

set_time_limit(4000); 

// Connect to gmail
$imapPath = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = '[email protected]';
$password = 'your_gmail_password';

// try to connect 
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

   /* ALL - return all messages matching the rest of the criteria
    ANSWERED - match messages with the \\ANSWERED flag set
    BCC "string" - match messages with "string" in the Bcc: field
    BEFORE "date" - match messages with Date: before "date"
    BODY "string" - match messages with "string" in the body of the message
    CC "string" - match messages with "string" in the Cc: field
    DELETED - match deleted messages
    FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
    FROM "string" - match messages with "string" in the From: field
    KEYWORD "string" - match messages with "string" as a keyword
    NEW - match new messages
    OLD - match old messages
    ON "date" - match messages with Date: matching "date"
    RECENT - match messages with the \\RECENT flag set
    SEEN - match messages that have been read (the \\SEEN flag is set)
    SINCE "date" - match messages with Date: after "date"
    SUBJECT "string" - match messages with "string" in the Subject:
    TEXT "string" - match messages with text "string"
    TO "string" - match messages with "string" in the To:
    UNANSWERED - match messages that have not been answered
    UNDELETED - match messages that are not deleted
    UNFLAGGED - match messages that are not flagged
    UNKEYWORD "string" - match messages that do not have the keyword "string"
    UNSEEN - match messages which have not been read yet*/

// search and get unseen emails, function will return email ids
$emails = imap_search($inbox,'UNSEEN');

$output = '';

foreach($emails as $mail) {
	
	$headerInfo = imap_headerinfo($inbox,$mail);
	
	$output .= $headerInfo->subject.'
'; $output .= $headerInfo->toaddress.'
'; $output .= $headerInfo->date.'
'; $output .= $headerInfo->fromaddress.'
'; $output .= $headerInfo->reply_toaddress.'
'; $emailStructure = imap_fetchstructure($inbox,$mail); if(!isset($emailStructure->parts)) { $output .= imap_body($inbox, $mail, FT_PEEK); } else { // } echo $output; $output = ''; } // colse the connection imap_expunge($inbox); imap_close($inbox);
4 1 vote
Article Rating
Subscribe
Notify of
guest

30 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments