PHP / IMAP: содержимое почты MIME конвертировать - PullRequest
0 голосов
/ 26 ноября 2018

Я видел много тем на эту тему, но ни одна из них не решила мою проблему.Пожалуйста, учтите, что я впервые использую IMAP, и мне кажется, что я что-то пропустил.Я хочу преобразовать почту, полученную в почтовом ящике, в «вид команды».Все работает, за исключением содержимого почты, закодированного в MIME (я так думаю), и я не знаю, как получить его на UTF-8.Пожалуйста, обратите внимание, что я француз, поэтому я использую такие символы как éèâçôì и т. Д. И т. Д. См. Мой код ниже:

if($imap = @imap_open($server , $username, $password)) {
    $num = imap_num_msg($imap);

    while($num > 0) {
        $sujet      = imap_mime_header_decode(cropSubject($headers->subject));
        $time       = $headers->udate;
        $fromMail   = $headers->from[0]->mailbox.'@'.$headers->from[0]->host;
        $fromUser   = $headers->from[0]->mailbox;
        $fromHost   = $headers->from[0]->host;
        $content    = nl2br(imap_fetchbody($imap, $num, '1'));

        echo $content;
        echo "<hr>";
    }
}

На самом деле я просто хочу показать все полученные письма.Например, я получаю такие значения:

"Добрый день",

Проверка подлинности теста CR = C3 = Директива A9 по почте.

Cordialement. "

Вместо:

«Добрый день»,

Сессия по проверке почты.

Cordialement. "

Я виделмногие потоки, которые рекомендуют использовать как imap_fetchstructure (), так и imap_fetchbody (), но я не думаю, что это решит мою проблему.Использование imap_utf8 () не работает.

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

Есть идеи?

EDIT: quoted_printable_decode () отлично работает, за исключением того, что он обрезает длинные строки с "= \ r \ n", который я не могу обработать.Я видел взлом на PHP документации, но это не похоже на работу.Код ниже.

$content = str_replace("=\r\n", '', quoted_printable_decode($content));

echo $content;

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 27 ноября 2018

Я получил это с помощью решения @Max + мой собственный код.См. Ниже.

    $content = quoted_printable_decode($content);
    $c = explode("\r\n", $content);

    foreach($c as $key => $value) {
        if(substr($value, strlen($value) - 6, strlen($value)) == "<br />" && $value != "<br />" && substr($value, strlen($value) - 7, strlen($value)) != "=<br />") {
            $c[$key] = substr($value, 0, strlen($value) - 6);
        } elseif(strlen($value) >= 7 && substr($value, strlen($value) - 7, strlen($value)) == "=<br />") {
            $c[$key] = substr($value, 0, strlen($value) - 7);
        } elseif($value == "<br />") {
            $c[$key] = "\r\n\r\n";
        }
    }

    $content = implode("", $c);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...