Gmail IMAP Содержимое электронной почты искажено - PullRequest
1 голос
/ 30 апреля 2009

У меня есть пользовательская веб-система управления контактами, которую мы встроили в PHP для отслеживания контактов и недавно начали проверять нашу электронную почту Google с помощью IMAP, а затем, если этот контакт находится в нашей системе управления контактами:

  1. Копирование сообщения в таблицу базы данных MySQL, связанную с этим контактом
  2. Пометка этого контакта для отслеживания этого дня
  3. Архивирование сообщения в Gmail

Кажется, что все работает отлично, ЗА ИСКЛЮЧЕНИЕМ ... каждые столько писем мы получаем действительно искаженное сообщение, которое выглядит так:

FABRRRQAUUUUAJXDjxZrUtzNFa2UMwjYj5YnYgZ74Ndwa4bwfzqmpH3 / wDZjTcl CnKdr2Fa7SJP + Ek8S / 8AQJX / AMB5P8aZN4s162j33GmxxrnG54XUfqa6ysHxp / уА / wDtqv8AWuej jFUqKDgtSpQsr3L13r4tPDcOoShBcTxgog6FiP5CsrwtpjuzavekvcTZKFuwPf8AH + VZOlwS + Iby 1jlBFnZRKhGeDjt9Sf0Fd0qhVCqAABgA

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

Заранее спасибо.

С уважением,

Джеймс

Ответы [ 3 ]

2 голосов
/ 30 апреля 2009

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

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

Received: from xxxxxxxxx ([xxx.xx.xx.xxx]) by xxxxxxxxxx.xxx.xxxxxxxxxxxxxxx.xxx with Microsoft SMTPSVC(6.0.3790.3959);
     Wed, 29 Apr 2009 21:29:16 +0000
Received: from xxxx-xxx-xxxxxx ([xxx.xx.xxx.xxxx]) by xxxxxxxx ; Wed, 29 Apr 2009 15:29:16
 -0600
Message-ID: <AADB29A7-AAED-4068-B4A8-300E3B0D93AB@localhost>
MIME-Version: 1.0
From: xxxxxxxxxx@xxxxxxxxxxxxxxx.com
To: xxxxxxxxxx@xxxxxxxxxxxxxxx.com
Date: 29 Apr 2009 15:29:16 -0600
Subject: xxxx Account Update
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
Return-Path: xxxxxx@xxxxxxxx.com
X-OriginalArrivalTime: 29 Apr 2009 21:29:16.0374 (UTC) FILETIME=[8C63AF60:01C9C911]

Обратите особое внимание на заголовки Content-Type и Content-Transfer-Encoding.

1 голос
/ 30 апреля 2009

Я полагаю, что IMAP через SSL, так что это может быть соединение с IMAP, которое не синхронизировано. Лучшее решение, которое у меня есть для этого, это просто проверить, содержит ли тело действительно длинное слово. Поскольку этот мусор не имеет пробелов:

<?php
function wordlength($txt, $limit)
{
   $words = explode(' ', $txt);

   foreach($words as $v)
   {
       if(strlen($v) > $limit)
       {
            return false;
       }
   }

   return true;
}
?>

Использование:

<?php

$txt = "Message Body would be here";

if(!wordlength($txt, 45))
{
    //maybe try to pull the message again or
    //send an email to you telling you there is a problem
}

?>

Я выбрал 45 на всякий случай, когда некоторые используют слово Pneumonoultramicroscopicsilicovolcanoconiosis в электронном письме. : D

Хотя Джордан может быть прав. Это может быть просто в кодировке base64. Тогда я просто взорвал бы () заголовки и искал бы их, и если он там есть, простой base64_decode () сделает свое дело.

0 голосов
/ 05 июня 2012

Это помогло мне с искаженной темой письма. http://php.net/manual/en/function.imap-header.php

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