2014-01-31 8 views
5

Wenn ich überprüfen möchte, wer eine bestimmte E-Mail mit JavaMail an mich sendet.Kann eine Nachricht mehrere Absender enthalten?

kann ich

Message.getFrom() 

verwenden, die einen von einer wiederbelebt Nachricht haben mehrere Identitäten es kam

Message[] 

In welchen Umständen zurückgibt, kann?

In Bezug auf die API macht dies mehr Sinn für ausgehende E-Mails.

So kann ich wirklich auf, dass:

Address from = message.getFrom()[0]; 

immer gibt mir wieder genau 1 Adresse, die die Nachricht wurde schicken?

Ich habe jetzt Implementiert so etwas wie:

Address[] fromAddress = message.getFrom(); 

if (fromAddress == null || fromAddress.length > 1) { 
    // Don't Process the Email and Notify me 
} 
+0

Die Dokumentation zeigt, dass es ein * leeres * Array zurückgeben kann. –

+0

Dies ist sinnvoll, wenn Sie eine Nachricht senden und noch nicht festgelegt haben. Aber jede eingehende Nachricht sollte genau eine Identität haben, von der sie kam. Ich verstehe nicht, warum eine E-Mail/Nachricht jemals mehr als ein Von-Feld haben sollte ... – Kuchi

+1

Null und eins passieren in der Praxis. Mehr als eins ist heutzutage ein sicheres Zeichen für Spam (das war im vorherigen Jahrtausend anders), also stellen Sie sicher, dass Ihr Code in diesem Fall nicht abstürzt und alles wird gut. – arnt

Antwort

4

Ja, es scheint, dass Message.getFrom() wirklich mehrere Adressen zurückgeben kann.

Ich habe mir die Quellen für Apache Geronimos Implementierung der JavaMail-API angesehen und es werden mehrere Adressen zurückgegeben, wenn mehrere From: Header oder mehrere Adressen in einem Header vorhanden sind.

Zur Frage, ob dies geschehen konnte:

Wie von Alex K. Antwort, kann der Standard mehr „From“ Adressen, wenn es ein einziger „Sender“ ist. Ich weiß nicht, ob jemand wirklich Mails mit mehreren "Von" -Adressen versendet, aber es ist normenkonform.

Eine andere Situation, die in der Praxis tatsächlich passiert:

Einige Spammer scheinbar Mail mit mehreren From: Header senden. Dies ist nicht standardkonform, aber offenbar akzeptieren einige Mailserver die Mail trotzdem. Dies geschieht anscheinend, um Postfilter zu erreichen, die nach der Adresse From: filtern. Die Spammer enthalten mehrere Adressen in der Hoffnung, dass ein simpler Filter die Nachricht passieren lässt, wenn sie eine Kopfzeile mit einer "Von" -Adresse findet, die sie mag.

Also zusammenfassend: Ja, Sie sollten Message.getFrom() erwarten, mehrere Adressen zurückzugeben (oder gar keine). Sie müssen jedoch wahrscheinlich nicht viel Energie für die Handhabung dieses Gehäuses aufwenden. Vielleicht können Sie es sogar schaffen, es einfach als Fehler zu protokollieren - das hängt von Ihrer Anwendung ab.

2

SMTP MAIL FROM Befehl nur 1 Adresse erlaubt jedoch die From: Header (IWF Format) an eine einzelne Adresse

RFC nicht eingeschränkt 5322, 3.6.2. Absenderfelder: Die Absenderfelder einer Nachricht bestehen aus dem Feld from, ... Das Feld from besteht aus dem Feldnamen "From" und einer durch Kommas getrennten Liste mit einer oder mehreren Postfachspezifikationen.

(Dies funktioniert, weil die RFC einen einzelnen sender Header erfordert, ist es multible from s)

Verwandte Themen