Fetching mail from a POP3 server using php

后端 未结 4 1340
逝去的感伤
逝去的感伤 2020-12-01 04:42

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 f

相关标签:
4条回答
  • 2020-12-01 04:59

    you can use pop3 e-mail client class which can Access to e-mail mailboxes using the POP3 protocol. You will get each e-mail body part and can store it in database, even you can retrieve attached files without deleting the original mail in the inbox. For more go to http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html

    0 讨论(0)
  • 2020-12-01 04:59

    IF you have PHP build with IMAP support, it would be easy, see IMAP documentation (especially comments at this page) at http://php.net/manual/en/book.imap.php

    UPDATE: to clarify my answer - as you see in the comments and function reference, PHP imap_* functions can be used also for pop3.

    0 讨论(0)
  • 2020-12-01 05:04

    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.

    0 讨论(0)
  • 2020-12-01 05:12

    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);
    }
    
    0 讨论(0)
提交回复
热议问题