Мне нужно иметь возможность использовать мой gmail из сценария php. Но независимо от того, что я пытаюсь, тело сообщения выводит все дерьмовые с такими символами, как = 3D и случайные знаки равенства. Иногда это происходит как base64 или вообще ничего. Как я могу получить электронное письмо и отправить его в HTMLPurifier clean html или обычный текст в pre, если нет html.
$overview = imap_fetch_overview($inbox,$email_number,0); $body_pre = imap_fetchbody($inbox, $email_number, 2.1); $message = imap_fetchbody($inbox, $email_number, 2.2); $message = base64_decode($message); if (empty($message)) { $message = $body_pre; $message = preg_replace('@(https?://([-\w\.]+)+(:\d+)?((/[\w/_\.%\-+~]*)?(\?\S+)?)?)@', '<a href="$1">$1</a>',$message); $message = '<pre>'.htmlentities($message).'</pre>'; }else{ $cleanconfig = HTMLPurifier_Config::createDefault(); $cleanconfig->set('Core.Encoding', 'UTF-8'); $cleanconfig->set('HTML.Doctype', 'HTML 4.01 Transitional'); $purifier = new HTMLPurifier($cleanconfig); $message = $purifier->purify($message); }
этот код, $ message просто пуст.
Вы предполагаете, что ваше почтовое сообщение всегда находится в позиции 2.2? Нет абсолютно никаких гарантий … зависит от того, какое сообщение отправлено, вы планируете текст (всего одно тело), html / text (two), с приложением (три плюс) в ответ на другое электронное письмо (тогда другое электронное письмо будет телом с это собственные субпозиции).
Данные =3D
(с какими-либо печатными) и base64 являются из-за кодирования тела сообщения. Посмотрите на imap_fetchstructure
которая объясняет, сколько частей они находятся в сообщении (вы можете найти его, чтобы найти текст), и просмотрите компонент ->type
каждого тела, чтобы узнать о его кодировании (тип = 4 указан для печати, введите = 3 – base64)