Разбор электронной почты, отправленной из Outlook по каналу php - PullRequest
1 голос
/ 23 апреля 2011

Использование этой строки: парсинг писем

Мне удалось получить почтовую рассылку и полный анализ вложения / тела ... до тех пор, пока электронная почта не отправлена ​​из outlook.

Он отлично выполняется из gmail и thunderbird, однако, когда входящее электронное письмо отправляется из outlook, скрипт завершается неудачно. Я полагаю, что это как-то связано с тем, как outlook форматирует свои сообщения (в комментариях на учебном сайте кто-то упоминает, что outlook не соблюдает правила), но, честно говоря, проблема стоит передо мной. Любая помощь будет оценена, спасибо.

fyi: это новейшая версия outlook (win7).

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Как вы уже видели, Outlook - это бич вселенной электронной почты. Вы заметите, что источник, указанный в учебнике, который вы используете, несколько раз ссылается на контент, закодированный как text/plain. Письмо, отправляемое из Outlook, скорее всего, содержит text/html содержимого вместо или в дополнение к текстовому тексту.

В зависимости от того, что вы хотите сделать с содержимым электронного письма, вы можете адаптировать скрипт для приема text/html закодированного контента, также вставив дублирующий поиск тела ниже существующего, например, так:

//get the message body  
if(substr($decoded[0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Body'])){  

    $body = $decoded[0]['Body'];  

} elseif(substr($decoded[0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Body'])) {  

    $body = $decoded[0]['Parts'][0]['Body'];  

} elseif(substr($decoded[0]['Parts'][0]['Parts'][0]['Headers']['content-type:'],0,strlen('text/html')) == 'text/html' && isset($decoded[0]['Parts'][0]['Parts'][0]['Body'])) {  

    $body = $decoded[0]['Parts'][0]['Parts'][0]['Body'];  

}  

Что, конечно, не очень красиво, но должно извлекать HTML-контент из Outlook, если он обнаружен.

Если вам нужно проанализировать HTML-контент, ваша проблема будет немного сложнее. Ваш следующий шаг - взглянуть на некоторые ответы на этот вопрос: Надежный, зрелый HTML-парсер для PHP .

Удачи!

0 голосов
/ 24 апреля 2011

Хорошо ...

Так что я исправил это. Я настраивал трубу в Cpanel, потому что это проще. Я поставил канал под «фильтрацию на уровне аккаунта», он отлично работал для всего, кроме перспективы. Мне бы очень хотелось, чтобы сценарий печатал данные для отладки, но он никогда не выполнялся, когда электронная почта пришла из Outlook. Посмотрел в почтовых логах ... ничего очевидного. Мой админ по какой-то прихоти предложил мне перенести канал в раздел «Форвардеры» в cpanel. Ну, теперь это работает отлично. Должно быть ошибка в cpanel. Почему чем больше вы узнаете о компьютерах, тем меньше их смысла.

Еще пара твиков, которые мне пришлось реализовать:

A) при написании / редактировании скрипта в среде Windows добавляются скрытые символы. Чтобы это исправить, я загружаю файл php, открываю его в файловом менеджере cpanel (us-ascii) и сохраняю его. Это удаляет персонажей. (очевидно, может открываться и в * nix) Б) Я должен был chmod до 755, или он не будет работать. Скрипты сидят за пределами моего \ www, так что не беспокойтесь. C) Мой шебанг должен был быть: #! / Usr / bin / php -q. Вопрос был необходим, чтобы запустить его.

Надеюсь, это поможет кому-то еще.

...