2010-07-02 8 views
29

Ich versuche, eine E-Mail von POP3 (Ich benutze POP3 Mail-Server und ich versuche, den Mail-Inhalt zu holen und speichern in einer Datenbanktabelle für mein Projekt.), Aber ich kann kein PHP-Skript dafür finden, alle sind nur für IMAP.Holen Mail von einem POP3-Server mit PHP

Wissen Sie, wie Sie E-Mails von einem POP3-Server abrufen können?

Danke.

Antwort

30

Etwas überraschend ist, kann PHP's imap library auch für das Arbeiten mit POP3-Mailboxen verwendet werden. Die meisten erweiterten IMAP-Funktionen funktionieren natürlich nicht (z. B. Ordner oder Abrufen von Nachrichtenteilen), aber die grundlegenden POP3-Funktionen sind implementiert.

Der Hauptunterschied ist die Option Zeichenfolge, die Sie imap_open vorbei sind - die Seite zu zitieren:

// 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, es ist fair Segeln - Sie mehr nicht als imap_open benötigen, imap_num_msg, imap_body, imap_delete und imap_close für den grundlegenden POP3-Zugriff.

1

Wenn Sie PHP Build mit IMAP-Unterstützung haben, wäre es einfach, sehen IMAP Dokumentation (vor allem Kommentare auf dieser Seite) bei http://php.net/manual/en/book.imap.php

UPDATE: meine Antwort zu klären - wie Sie in den Kommentaren und Funktionsreferenz sehen PHP imap_ * Funktionen können auch für pop3 verwendet werden.

5

PHP's IMAP functions kann mit IMAP und POP3-Boxen umgehen.

Mit diesen Funktionen können Sie sowohl mit dem IMAP-Protokoll als auch mit den Zugriffsmethoden NNTP, POP3 und lokaler Mailbox arbeiten.

Beachten Sie jedoch, dass einige IMAP-Funktionen mit dem POP-Protokoll nicht korrekt funktionieren.

gibt es eine User Contributed Note, die ein interessantes Schnipsel bietet. Vielleicht möchten Sie es sich ansehen. Ich kann nichts über seine Qualität sagen, aber von der Oberfläche sieht es gut aus.


Unten der Beitrag Hinweis:

Für alle Menschen kommen hier beten für:

1) eine tote einfache Möglichkeit, MIME-Anhänge zu lesen, oder

2) eine tod-einfache Möglichkeit, auf POP3-Ordner zuzugreifen

Suchen Sie nicht weiter.

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); 
} 
+1

Einige Bugs in diesem Codebeispiel (ersetzen Sie $ imap durch $ connection in pop3_stat); Antwort $ Antwort in pop3_list ..... – philippe