Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fetching mail from a POP3 server using php

Tags:

php

pop3

I am trying to fetch a mail from POP3 (I am using POP3 mail server and I am trying to fetch the mail content and store into a database table for my project.), but I can't find any PHP script for that, all are only for IMAP.

Do you know how to fetch mail from a POP3 server?

Thanks.

like image 431
VinothPHP Avatar asked Jul 02 '10 10:07

VinothPHP


People also ask

What is POP3 fetching?

What Are Fetch Emails? With Fetch Email (POP3), your Emails are kept in the server until the client asks for it. Your Email won't be in the server for very long since the client will usually ask for it after a few minutes.

How can I get email in PHP?

It's possible to receive email in PHP by running a mail server and executing a PHP script with the email passed to STDIN. With CloudMailin you don't need to do any of that, your email is delivered to your application over HTTP(S).

How can I retrieve mail from Gmail using PHP?

php /* connect to gmail */ $hostname = '{imap.gmail.com:993/imap/ssl}INBOX'; $username = 'my gmail id'; $password = 'my gmail password'; /* try to connect */ $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' .

How do I send an email from POP3?

Select Internet Email and click on Next. Enter your name and email address at user information. Select POP3 for the account type and enter pop.mail.com as incoming server and smtp.mail.com as outgoing server. Enter your mail.com email address and password as log in credentials.


2 Answers

Somewhat surprisingly, PHP's imap library can be also used for working with POP3 mailboxes. Most of the advanced IMAP features won't work, of course (e.g. folders or fetching message parts), but the basic POP3 functionality is implemented.

The main difference is the option string that you're passing to imap_open - to quote that page:

// To connect to a POP3 server on port 110 on the local server, use: $mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password"); 

Other than that, it's fair sailing - you won't need more than imap_open, imap_num_msg, imap_body, imap_delete and imap_close for basic POP3 access.

like image 194
Piskvor left the building Avatar answered Sep 19 '22 14:09

Piskvor left the building


PHP's IMAP functions can deal with both IMAP and POP3 boxes.

These functions enable you to operate with the IMAP protocol, as well as the NNTP, POP3 and local mailbox access methods.

Be warned, however, that some IMAP functions will not work correctly with the POP protocol.

there is a User Contributed Note that provides an interesting snippet. You may want to take a look at it. I can't say anything about its quality but from the surface, it looks okay.


Below, the Contributed Note:

For all the people coming here praying for:

1) a dead-easy way to read MIME attachments, or

2) a dead-easy way to access POP3 folders

Look no further.

function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false) {     $ssl=($ssl==false)?"/novalidate-cert":"";     return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass)); } function pop3_stat($connection)         {     $check = imap_mailboxmsginfo($connection);     return ((array)$check); } function pop3_list($connection,$message="") {     if ($message)     {         $range=$message;     } else {         $MC = imap_check($connection);         $range = "1:".$MC->Nmsgs;     }     $response = imap_fetch_overview($connection,$range);     foreach ($response as $msg) $result[$msg->msgno]=(array)$msg;      return $result; } function pop3_retr($connection,$message) {     return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT)); } function pop3_dele($connection,$message) {     return(imap_delete($connection,$message)); } function mail_parse_headers($headers) {     $headers=preg_replace('/\r\n\s+/m', '',$headers);     preg_match_all('/([^: ]+): (.+?(?:\r\n\s(?:.+?))*)?\r\n/m', $headers, $matches);     foreach ($matches[1] as $key =>$value) $result[$value]=$matches[2][$key];     return($result); } function mail_mime_to_array($imap,$mid,$parse_headers=false) {     $mail = imap_fetchstructure($imap,$mid);     $mail = mail_get_parts($imap,$mid,$mail,0);     if ($parse_headers) $mail[0]["parsed"]=mail_parse_headers($mail[0]["data"]);     return($mail); } function mail_get_parts($imap,$mid,$part,$prefix) {         $attachments=array();     $attachments[$prefix]=mail_decode_part($imap,$mid,$part,$prefix);     if (isset($part->parts)) // multipart     {         $prefix = ($prefix == "0")?"":"$prefix.";         foreach ($part->parts as $number=>$subpart)              $attachments=array_merge($attachments, mail_get_parts($imap,$mid,$subpart,$prefix.($number+1)));     }     return $attachments; } function mail_decode_part($connection,$message_number,$part,$prefix) {     $attachment = array();      if($part->ifdparameters) {         foreach($part->dparameters as $object) {             $attachment[strtolower($object->attribute)]=$object->value;             if(strtolower($object->attribute) == 'filename') {                 $attachment['is_attachment'] = true;                 $attachment['filename'] = $object->value;             }         }     }      if($part->ifparameters) {         foreach($part->parameters as $object) {             $attachment[strtolower($object->attribute)]=$object->value;             if(strtolower($object->attribute) == 'name') {                 $attachment['is_attachment'] = true;                 $attachment['name'] = $object->value;             }         }     }      $attachment['data'] = imap_fetchbody($connection, $message_number, $prefix);     if($part->encoding == 3) { // 3 = BASE64         $attachment['data'] = base64_decode($attachment['data']);     }     elseif($part->encoding == 4) { // 4 = QUOTED-PRINTABLE         $attachment['data'] = quoted_printable_decode($attachment['data']);     }     return($attachment); } 
like image 34
Pekka Avatar answered Sep 19 '22 14:09

Pekka