2010-07-02 2 views
29

Я пытаюсь получить почту из POP3 (я использую почтовый сервер POP3, и я пытаюсь получить почтовый контент и хранить его в таблице базы данных для моего проекта.), Но я не могут найти для него скрипт PHP, все они предназначены только для IMAP.Получение почты с сервера POP3 с помощью php

Вы знаете, как получать почту с сервера POP3?

Спасибо.

ответ

30

Несколько удивительно, PHP's imap library может быть также использован для работы с почтовыми ящиками POP3. Большинство усовершенствованных функций IMAP, конечно, не будут работать (например, папки или выборка частей сообщения), но реализована базовая функциональность POP3.

Основным отличием является опция строка, которую вы передаете в imap_open - процитировать эту страницу:

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

Кроме этого, это справедливо парусный спорт - вам не нужно больше, чем imap_open, imap_num_msg, imap_body, imap_delete и imap_close для базового доступа к POP3.

1

Если у вас есть PHP сборка с поддержкой IMAP, было бы легко, см IMAP документации (особенно комментарии на этой странице) в http://php.net/manual/en/book.imap.php

UPDATE: уточнить мой ответ - как вы видите в комментариях и функции справке , PHP imap_ * функции могут также использоваться для pop3.

5

PHP's IMAP functions может иметь дело с коробками IMAP и POP3.

Эти функции позволяют работать с протоколом IMAP, а также с методами доступа NNTP, POP3 и локального почтового ящика.

Следует предупредить, однако, что некоторые IMAP-функции не будут работать корректно с протоколом POP.

есть User Contributed Note, который предлагает интересный фрагмент. Вы можете взглянуть на него. Я ничего не могу сказать о его качестве, но с поверхности, все хорошо.


Внизу Внесенный Примечание:

Для всех людей, приезжающих сюда, молящихся за:

1) мертвое-легкий способ чтения вложений MIME, или

2) мертвый способ доступа к папкам POP3

Не смотрите дальше.

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

Немного ошибок в этом примере кода (замените $ imap на $ connection в pop3_stat); return $ response в pop3_list ..... – philippe

3

вы можете использовать класс клиента электронной почты pop3, который может получать доступ к почтовым ящикам электронной почты, используя протокол POP3. Вы получите каждую часть тела электронной почты и можете сохранить ее в базе данных, даже если вы можете получить прикрепленные файлы, не удаляя исходную почту во входящих. Для получения дополнительной информации обратитесь к http://www.phpclasses.org/package/2-PHP-Access-to-e-mail-mailboxes-using-the-POP3-protocol.html

Смежные вопросы