2011-01-18 2 views
21

В настоящее время я использую mimeDecode.php библиотеки PEAR для анализа входящих писем. Кажется, что у вас много проблем и не удается декодировать много сообщений, поэтому я хотел бы заменить его чем-то лучше.Лучший способ обработки/декодирования электронной почты в PHP?

Я ищу что-то, что может правильно отделить части сообщения, например, от, от тела и т. Д. В идеале он сможет обрабатывать все распространенные методы кодирования, такие как base64, uuencode, цитируемый для печати , и т. д.

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

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

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

В настоящее время я делаю «на лету» декодирование сообщений на PHP, поэтому я ищу решение для замены PHP.

У кого-нибудь есть опыт с этим, который мог бы указать мне в правильном направлении? Мне бы очень хотелось начать использовать что-то, что в конечном итоге не будет делать то, что мне нужно.

ответ

5

Забавно, что вы должны спросить ... Im фактически работает над простой системой уведомлений. Я только что закончил Bounce Manager, и я использовал Zend_Mail для реализации. Он имеет почти все функции, которые вы ищете ... вы можете подключиться к почтовому ящику (POP3, IMAP, Mbox и Maildir) и извлекать из него сообщения, а также работать со всеми этими сообщениями.

Он обрабатывает многостраничные сообщения, но с деталями может быть сложно работать. Мне было трудно понять, какая часть была прикрепленной оригинальной частью сообщения в NDR, с которой я работал, но у меня есть чувство, что я просто что-то пропустил в документации. Я не уверен, как он обрабатывает кодировку, потому что мое использование было довольно простым, но я уверен, что у него есть положения для всех упомянутых вами кодировок. Ознакомьтесь с документами и просмотрите API.

+0

Вы знаете, если можно использовать Zend_Mail без разъема для хранения? Я хотел бы передать ему входящее сообщение в виде строки и иметь возможность использовать методы, связанные с сообщениями на нем, без необходимости приходить из хранилища. – Sgraffite

+2

Да Я уверен, что есть способ, потому что этот же класс используется для отправки сообщений с классами почтовой/транспортной сети, и в этом случае вы всегда будете строить строки сообщений/файлы. Если я напомню, что он выглядит как '$ m = new Zend_Mail_Message (array ('raw' => $ stringMessage));' Посмотрите на фактический класс и комментарии к документу для проверки конструктора. – prodigitalson

+0

Это закончилось для меня. Зенд сделал несколько вещей, которые я почему-то не понял. Zend генерирует исключение, если оно не распознает заголовок. В моем случае, я не забочусь о непризнанных заголовках, поэтому я закончил тем, что комментировал это исключение. Также есть функция, где Zend делает foreach() на $ parts, но иногда переменная, которую она пытается выполнить foreach on, имеет значение null, поэтому я добавил нулевую проверку и возвратил $ res, если она там null. – Sgraffite

1

Я в настоящее время также ищут простую в использовании, надежную библиотеку разбора электронной почты MIME и в настоящее время серьезно смотрю на компонент Mail от eZ Components. Но, если вы ищете что-то, что сделает так же просто, как echo $email->text; или echo $email->html;, как и я, вы будете разочарованы. На самом деле, теперь я не думаю, что такое упрощение даже возможно, из-за того, как работает MIME. Но это действительно лучший вариант в мире PHP.

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

Что касается IMAP Расширение PHP, предназначенное для обработки сообщений из вашего почтового ящика, а не MIME-декодирования. Хотя, у него действительно есть удобная функция декодирования, которая вам может понадобиться. Mailparse Расширение PECL, с другой стороны, касается именно этой проблемы. Я еще не пробовал, но, похоже, вам нужно написать много кода, чтобы действительно получить нужные данные.

+0

Это выглядит прилично, глядя на документы. Я уже потратил часы на внедрение и тестирование библиотеки Zend_Mail, и, похоже, она работает очень хорошо. Я честно не могу тратить больше времени на работу, глядя в новую библиотеку на этом этапе. Спасибо за ответ хотя :) – Sgraffite

12

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

https://github.com/plancake/official-library-php-email-parser

+2

отличная библиотека чувак! –

+1

Эй, рад, что тебе это нравится! – dan

+1

Он не обрабатывает вложения хорошо - он имеет файлы с кодировкой base64, вложенные в тело HTML. И вообще не имеет функций getAttachment() '. – Slawa

2

Для полноты вот один я собираюсь попробовать. http://code.google.com/p/php-mime-mail-parser/ - это оболочка вокруг PHP MailParse, которая должна быть установлена.

+0

не работает все время, у меня есть несколько примеров, которые он не мог обработать по электронной почте. – behz4d

3

Я раздвоил PHP-мим-почта парсер, чтобы исправить все вопросы: Fork of php-mime-mail-parser

Более 52 тестов и 764 утверждений Code Coverage: 100% линий, 100% Функции и методы, 100% классов и Черты

Вам нужен пакет PECL MailParse, чтобы использовать его, но оболочка без проблем и полностью протестирована.

4

Я знаю, что этот вопрос уже четыре года ... но мне в итоге понадобилась библиотека разбора почты и не была удовлетворена ни одним из доступных вариантов. Я хотел что-то надежное, совместимое с PSR-2, устанавливаемое через композитор.

composer require zbateson/mail-mime-parser 

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

https://github.com/zbateson/MailMimeParser

Отъезд wiki для руководства и API ... и если вы найдете ошибки/опечатки или увидеть улучшения, пожалуйста, внести свой вклад :)

+0

Для этого может потребоваться несколько QA, но первое впечатление: оно работает. Спасибо, @ Заахид – tivnet

+1

Отлично работает! Я пишу 40 + МБ сообщений из вложенных сообщений AWS SES на S3 с нулевыми проблемами. Отличная библиотека. – bishop

Смежные вопросы