webentwicklung-frage-antwort-db.com.de

Der beste Weg, um das Parsen/Dekodieren von E-Mails in PHP zu handhaben?

Momentan verwende ich die Bibliothek mimeDecode.php von PEAR, um eingehende E-Mails zu analysieren. Es scheint viele Probleme zu haben und kann viele Nachrichten nicht entschlüsseln. Ich möchte es daher durch etwas Besseres ersetzen.

Ich suche nach etwas, das in der Lage ist, Teile der Nachricht richtig zu trennen, wie z. B. zu, von, Körper usw. Im Idealfall wäre es in der Lage, alle gängigen Codierungsmethoden wie base64, uuencode, quoted printable usw. zu handhaben.

In Situationen, in denen sowohl Nur-Text- als auch HTML-Versionen derselben Nachricht in einer einzigen E-Mail enthalten sind, möchte ich im Idealfall den Unterschied zwischen ihnen kennen, damit ich auswählen kann, welchen Teil ich anzeigen möchte.

Ich mache mir zum jetzigen Zeitpunkt keine Sorgen um Eigensinne, aber es wäre schön, wenn ich davon Kenntnis hätte, falls ich das in Zukunft umsetzen möchte.

Ich habe gesehen, dass PHP eine Gruppe von Funktionen hat, die mit dem Wort imap beginnen und so aussehen, als ob sie tun könnten, was ich möchte, aber ich bin mir nicht sicher, ohne sie auszuprobieren.

Momentan dekodiere ich die Nachrichten direkt in PHP, weshalb ich nach einer PHP Ersatzlösung suche.

Hat jemand eine Erfahrung damit, die mich in die richtige Richtung weisen könnte? Ich würde es hassen, etwas zu verwenden, das auf lange Sicht nicht das tut, was ich brauche.

23
Sgraffite

Witzig solltest du fragen ... Ich arbeite gerade an einem einfachen Benachrichtigungssystem. Ich habe gerade den Bounce Manager fertiggestellt, indem ich Zend_Mail verwende. Es bietet so ziemlich alle Funktionen, nach denen Sie suchen ... Sie können eine Verbindung zu einer Mailbox (POP3, IMAP, Mbox und Maildir) herstellen und Nachrichten daraus abrufen sowie alle diese Nachrichten bearbeiten.

Es behandelt mehrteilige Nachrichten, aber es kann schwierig sein, mit den Teilen zu arbeiten. Es fiel mir schwer, herauszufinden, welcher Teil der angehängte ursprüngliche Nachrichtenteil in den NDRs war, mit denen ich arbeitete, aber ich habe das Gefühl, dass mir etwas in der Dokumentation entgangen ist. Ich bin nicht sicher, wie es mit der Kodierung umgeht, da meine Verwendung recht einfach war, aber ich bin mir ziemlich sicher, dass es für alle Kodierungen, die Sie erwähnt haben, Vorkehrungen trifft. Überprüfen Sie die Dokumente und durchsuchen Sie die API.

5
prodigitalson

Ich habe vor kurzem einen PHP Mail-Parser entwickelt, und ich habe ihn in der Produktion verwendet.
Ich bin sehr zufrieden damit und einige Entwickler haben es gegabelt:

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

12
dan

Ich weiß, dass diese Frage jetzt vier Jahre alt ist ... aber ich brauchte eine Mail-Parsing-Bibliothek und war mit den verfügbaren Optionen nicht zufrieden. Ich wollte etwas zuverlässiges, PSR-2-kompatibles, über Composer installierbares Programm.

composer require zbateson/mail-mime-parser

Es ist ein eigener Parser, der von Grund auf aufgebaut wurde, um bekannte Probleme und Fehler in anderen Implementierungen zu umgehen. Es ist ausgiebig getestet und weit verbreitet.

In der Bibliothek werden Psr7-Streams verwendet, mit denen Sie jeden beliebigen Stream übergeben können. Es speichert auch nicht alle Informationen im Speicher - sehr große Anhänge können, falls gewünscht, als Stream statt als Zeichenfolge zurückgegeben werden, sodass der Speicher nicht verbraucht wird. In ähnlicher Weise wird die gesamte Nachricht nie direkt im Speicher abgelegt, es werden nur Verweise auf Streams und Kopfzeilen im Speicher abgelegt.

https://github.com/zbateson/mail-mime-parser

Schauen Sie sich die Website für einen Leitfaden und die API an ... und wenn Sie Fehler/Tippfehler finden oder Verbesserungen sehen, können Sie ein Problem eröffnen oder Dig direkt einchecken und mit einer Pull-Anfrage beitragen :)

5
Zaahid

Ich habe den PHP-Mime-Mail-Parser gegabelt, um alle Probleme zu korrigieren: Gabel des PHP-Mime-Mail-Parsers

Über 52 Tests und 764 Assertions Code Coverage: 100% Zeilen, 100% Funktionen und Methoden, 100% Klassen und Eigenschaften

Sie benötigen das PECL-Paket MailParse, um es zu verwenden, aber der Wrapper ist ohne Probleme und vollständig getestet.

4
eXorus

Der Vollständigkeit halber werde ich hier versuchen. http://code.google.com/p/php-mime-mail-parser/ - Es handelt sich um einen Wrapper um PHP MailParse, der installiert werden muss.

2
Slawa

Ich bin momentan auf der Suche nach einer einfach zu bedienenden, robusten MIME-E-Mail-Parsing-Bibliothek und derzeit ernsthaft mit der Mail - Komponente von eZ Components. Aber wenn Sie nach etwas suchen, das es so einfach macht wie echo $email->text; oder echo $email->html;, wie ich es war, werden Sie enttäuscht sein. Eigentlich glaube ich nicht, dass eine solche Vereinfachung aufgrund der Funktionsweise von MIME überhaupt möglich ist. Aber es scheint die beste Option in der Welt PHP zu sein.

Ich habe angefangen, an meinem aktuellen Projekt mit der Zend_Mail-Komponente zu arbeiten, aber als es an der Zeit war, Dig in diese E-Mail-Teile und verschlüsselten Header zu integrieren, lässt Zend_Mail Sie ziemlich kalt. Sie müssen die meisten Dekodierungen selbst durchführen, was keinen Spaß macht.

Die Erweiterung von IMAP PHP bezog sich auf das Abrufen von Nachrichten aus Ihrer Mailbox, nicht auf MIME-Decodierung. Es hat zwar einige praktische Decodierungsfunktionen, die Sie möglicherweise benötigen. Mailparse PECL-Erweiterung befasst sich dagegen genau mit diesem Problem. Ich habe es noch nicht ausprobiert, aber es scheint, dass Sie eine Menge Code schreiben müssen, um tatsächlich zu den gewünschten Daten zu gelangen.

1
nnc