Готовые методы для работы c IMAP и POP3 в PHP

Готовые методы для работы c IMAP и POP3 в PHP

Готовые методы для работы c IMAP и POP3 в PHP

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

Здесь уже более серьезный подход к обработке содержимого письма. Так как письма в основном состоят из частей, то мы будем просматривать все части и даже дочерние части частей. Как бы это сложно не звучало, все довольно таки просто.

public function getmsg($mbox,$mid)
{
    $data = array();
    $s = imap_fetchstructure($mbox,$mid);
    if (!$s->parts)
        $data[] = $this->getpart($mbox,$mid,$s,0);
    else
    {
        foreach ($s->parts as $partno0=>$p)
            $data[] = $this->getpart($mbox,$mid,$p,$partno0+1);
    }
    return $data;
}

public function getpart($mbox,$mid,$p,$partno)
{
    $part = array();
    $data = ($partno)?
        imap_fetchbody($mbox,$mid,$partno):
        imap_body($mbox,$mid);

    if ($p->encoding==4)
        $data = quoted_printable_decode($data);
    elseif ($p->encoding==3)
        $data = base64_decode($data);

    $params = array();
    if (isset($p->parameters) && $p->parameters)
        foreach ($p->parameters as $x)
            $params[strtolower($x->attribute)] = $x->value;
    if (isset($p->dparameters) && $p->dparameters)
        foreach ($p->dparameters as $x)
            $params[strtolower($x->attribute)] = $x->value;
    $part["parameters"] = $params;
    $attachments = array();

    if (isset($params['filename']) || isset($params['name']))
    {
        $filename = (isset($params['filename']))? $params['filename'] : $params['name'];
        $attachments[$filename] = $data;
    }

    $part["attachments"] = $attachments;

    $plainmsg = "";
    $htmlmsg = "";
    $charset = "";
    // TEXT
    if ($p->type==0 && $data)
    {
        if (strtolower($p->subtype)=='plain')
            $plainmsg.= trim($data) ."\n\n";
        else
            $htmlmsg.= $data ."<br><br>";
        $charset = $params['charset'];
    }
    elseif ($p->type==2 && $data)
    {
        $plainmsg.= $data."\n\n";
    }

    $part["message"] = array(
        "content" => strlen($htmlmsg) > 0 ? $htmlmsg : $plainmsg,
        "charset" => $charset
    );
    if (isset($p->parts))
    {
        foreach ($p->parts as $partno0=>$p2)
            $part["subparts"][] = $this->getpart($mbox,$mid,$p2,$partno.'.'.($partno0+1));  // 1.2, 1.2.1, etc.
    }
    return $part;
}

Вам лишь нужно вставить этот код в свой класс и вызвать метод getmsg, параметрами которого является ваше подключение к почтовому ящику, и номер сообщения. Функция, входящая в состав готовых методов для работы с IMAP и POP3 в PHP и разбора частей сообщения просматривает дочерние части рекурсивно, поэтому вы точно не упустите ничего!

Метод возвращает массив, собранной декодированной информации о частях. В каждом элементе массива содержится подмассив вложения(пустой если часть не вложение) со всей необходимой информацией; подмассив содержимого(по умолчанию берется html текст, если он присутствует) с кодировкой и подмассив subparts, в котором содержатся все дочерние части сообщения, если таковые имеются.

Данные методы без проблем работают с любым текстом, не имеют проблем с кириллицей и с любыми типами файлов.

Похожие записи
  • Как запустить веб приложение через NP... Как запустить веб приложение через NPM с помощью serve. Есть множество способов запустить свои web html проекты. Для этого потребуется веб-сервер. Есть несколько простых веб-серверов для nodejs, которые можно использовать для запуска приложений. Это очень удобно для разработки и отладки. В данной статье не берем Express, так как он довольно сложен для настройки и использования. [...]
  • Как отследить все Javascript события ... Привет, сегодня я хочу рассказать тебе о простом но очень полезном методе, который позволяет отследить все Javascript события в Chrome. Он тебе поможет отследить все события, все вызовы всех функций на твоем сайте. Очень полезная команда для отладки фронт-энда. [...]
  • Как пользоваться популярными трекерам... Как пользоваться популярными трекерами без стороннего софта, прокси серверов или расширений Все просто. Недавно я писал про один из способ улучшить работу вашего интернета, который вы можете найти здесь и здесь. Днс сервера гугла помогут вам с этим, но могут и не помочь, как было у меня, потому как провайдер блокировал весь трафик, поступающий с данного [...]
  • Встраивание Foundation в Laravel с по... Что такое Elixir? Elixir — это компонент Laravel, позволяющий без проблем встраивать scss, sass, less компоненты в ваш проект. С помощью данного компонента очень легко можно подключить любые фронт-энд пакеты из npm, скомпилировать их, вести версии. Инструкция Для начала, чтобы скомпилировать исходный код фронтэнд библиотек, как известно, вам необходимо установить node с менеджером пакетов npm. [...]
  • ORM для CodeIgniter Недавно я писал про свой небольшой проект — доработку для CodeIgniter. Прочитать предыдущие статьи вы можете здесь. Здесь пойдет речь о упрощенной версии этого проекта, которую вы можете найти здесь. Собственно второй проект является упрощенной версией первого, так как не содержит моих методов для получения данных. Если вы искали именно это, то прошу. Генераторы моделей [...]

Пока нет комментариев

Добавить комментарий