Обнаружение quoted_printable при извлечении ссылок из электронных писем imap - PullRequest
1 голос
/ 09 июня 2019

У меня есть следующее:

if($emails) {
    $output = '';
    rsort($emails);
    foreach($emails as $email_number) {
        foreach ([1,2] as $option) {
            $structure = imap_fetchstructure($inbox, $email_number);
            $overview = imap_fetch_overview($inbox,$email_number,0);
            $message = quoted_printable_decode(imap_fetchbody($inbox,$email_number,$option));

            $regex = '#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#';
            preg_match_all($regex, $message, $links);
            foreach ($links[0] AS $link) {
                $output .= $link.'<br>';
            }
    }}
    echo $output;
}

Это работает нормально, за исключением того, что некоторые ссылки содержат , а некоторые содержат небольшой пустой квадрат запроса.

Если я не использую quoted_printable_decode(imap_fetchbody($inbox,$email_number,$option))

Тогда некоторые ссылки содержат = 3D.

Кажется, я могу понять, как это сделать правильно.

Я также пробовал:

$structure = imap_fetchstructure($inbox, $email_number, FT_UID);
if($structure->encoding == "4"){
    $message = base64_decode(imap_fetchbody($inbox, imap_msgno($inbox, $email_number), $option));
} elseif ($structure->encoding == "3") { 
    $message = imap_qprint(map_fetchbody($inbox, imap_msgno($inbox, $email_number), $option));
} else { 
    $message = imap_fetchbody($inbox,$email_number,$option);
}

Я просто не могу понять, как это сделать.

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