Выбирающая почта с сервера POP3 с помощью php

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

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

Спасибо.

34
задан Piskvor cc-by-sa 3.0 2 July 2010 в 11:01
поделиться

3 ответа

Как ни странно, библиотека imap PHP также может использоваться для работы с почтовыми ящиками 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.

34
ответ дан 27 November 2019 в 17:00
поделиться

Функции PHP IMAP могут работать как с IMAP, так и с POP3.

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

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

есть заметка, добавленная пользователями , содержащая интересный фрагмент. Вы можете взглянуть на это. Ничего не могу сказать о качестве, но на первый взгляд все нормально.


Ниже предоставлено примечание:

Для всех людей, которые приходят сюда и молятся за:

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);
}
10
ответ дан 27 November 2019 в 17:00
поделиться

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

ОБНОВЛЕНИЕ: чтобы прояснить мой ответ - как вы видите в комментариях и справочнике по функциям, функции PHP imap_ * могут использоваться также для pop3.

1
ответ дан 27 November 2019 в 17:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: