2008-09-29 7 views
16

Mit Java-Mail möchte ich eine E-Mail senden und den Status überprüfen. Mögliche Status sind:E-Mail senden und Status überprüfen

  • Hart bounce: Kein Mail-Server gefunden
  • Soft Bounce: Mail-Server nicht gefunden, aber kein Konto
  • Erfolg

Ist es sogar möglich, senden eine gefunden E-Mail und erhalten Sie Feedback zu dem Zustellungsversuch in der oben beschriebenen Weise?

BEARBEITEN: Ein Befragter schlug vor, nach einer Java-Bibliothek zu suchen, die dieselbe Funktionalität wie ListNanny bietet. Ich habe gesucht, aber nichts gefunden. Irgendeine Idee, wenn eine solche Bibliothek existiert?

Cheers, Don

Antwort

5

Sie können dies nicht zuverlässig oder konsequent. Was passiert, wenn Ihr lokaler Mail-Server es an einen ausgehenden Mail-Server des Unternehmens weiterleitet und dann zurückspringt, wenn dieser Server versucht, ihn weiterzugeben? Was passiert, wenn der Mailserver nicht mit dem anderen Mailserver kommunizieren kann und die Nachricht nach 4 Tagen abläuft?

1

Den Mailserver finden und verbinden: einfach. Nach einem Konto suchen: möglich. Aber es kommt darauf an, ob Sie überhaupt Zugriff auf den Mailserver bekommen. Es kann Ihre Verbindungsversuche (zB weil Ihr Netzwerk auf der schwarzen Liste) sinken

Die komplizierteste Sache ist, was Sie „Erfolg“ nennen:

Kurze Antwort: Nein.

Lange Antwort: Theoretisch wäre es möglich, aber Sie müssten Stunden warten, wenn nicht Tage, um den Status zu kennen. Bei Graylisting, Whitelisting, Spam blockierenden Mailservern akzeptieren viele nur nach mehreren Zustellversuchen eine E-Mail. Sie werden nur über den Liefererfolg Bescheid wissen, wenn sie die Post schließlich geliefert oder aufgegeben haben. Und abhängig von der Auslastung des Mail-Servers kann das Senden einer E-Mail für eine beliebige Zeit verschoben werden.

1

Ich bin nicht famliar spezifisch mit Javamail, aber ich würde das sagen: Sogar "Erfolg" kann nicht Erfolg sein.

Ihre Definition von harten und weichen Fehlern sollte einfach genug sein, um zu überprüfen. Wenn Sie einen Server nicht finden, ist es schwer, wenn Sie connet und der Server sagt "Mailbox nicht gefunden" ist es "weich". Aber was ist, wenn der Server die Nachricht akzeptiert und sie später zurückspringt? Viele Front-End-Server akzeptieren unbekannte Nachrichten, entweder aufgrund des Designs oder der Notwendigkeit (Front-End-Relay für "echte" Backend-Server), und wenn die Nachricht später an eine ungültige Adresse adressiert wird, wird die Nachricht an den Absender zurückgeschickt. In diesem Fall haben Sie einen "Erfolg" beim Senden gemeldet, wenn es wirklich nicht erfolgreich ist.

Die Lieferung ist fast unmöglich ohne eine Art von "klick hier" in der Nachricht eingebettet.

3

Was Sie tun müssen, ist den Umschlag SMTP-Absender auf eine Adresse, die Sie für NDR-Nachrichten überwachen. Sie müssen die E-Mails analysieren, wenn sie reinkommen und herausfinden, was schief gelaufen ist. Dies wird normalerweise für Mailing-Listen getan, und Produkte wie ListNanny werden verwendet, um die Nachrichten zu verarbeiten (es ist ein .NET-Produkt, aber ich bin mir sicher, dass es ein Java-Äquivalent gibt, oder Sie könnten es selbst schreiben).

Der Umschlag "von" unterscheidet sich von der Nachricht "von" Adresse. Es ist Teil der SMTP-Konversation, die zwischen Ihrem Code und Ihrem MTA stattfindet. Alle Unzustellbarkeitsberichte werden an diese Adresse gesendet.

+0

ListNanny klingt genau, was ich brauche. Ich habe (noch) keine gleichwertige Java-Bibliothek gefunden. –

+0

Es ist nicht * zu * schwierig, es selbst zu tun, zumindest auf einer grundlegenden Ebene. Wenn Sie einen Unzustellbarkeitsbericht finden können, finden Sie einige Semi-Standard-Datenblöcke, die leicht zu analysieren sind. Nur zu wissen, dass Sie einen Unzustellbarkeitsbericht haben, ist oft genug. –

+0

Ich hatte einen kurzen Blick darauf, und es scheint, dass das spezifische Format eines Unzustellbarkeitsberichts nicht standardisiert ist, oder wenn dies der Fall ist, gibt es viele nicht konforme Implementierungen. –

1

Verlassen Sie sich nicht auf das, was Sie zurück erhalten (wenn Sie zurückkommen) Informationen von einem Server.

Viele E-Mail-Server sind jetzt auf und nicht auf eingestellt. Geben Sie an, ob der Empfänger existiert oder nicht, da die Sicherheitslücke entsteht. (Wenn beispielsweise eine bestimmte Domain über das Vorhandensein einer E-Mail-Adresse berichtet ("Ja"/"Nein"), würde ein Hacker einfach einen Wörterbuchangriff auf den Server auslösen, um alle gültigen Benutzer zu ermitteln und somit einen Sofort-Spam zu erhalten Liste

4

Wenn Sie HTML-E-Mails versenden, möchten Sie möglicherweise ein transparentes Bild mit 1 Pixel in die E-Mail einbetten Die Bild-URL würde tatsächlich auf ein Servlet verweisen, das das Bild zurückgibt Message-ID als Parameter Die Idee dahinter ist, dass, wenn der Benutzer die Nachricht liest, er/sie das Bild anzeigt, das Ihr Servlet auslöst, das in die db schreibt, dass die Nachricht gelesen wurde.

+0

Nicht sicher, dass dies eine gute Idee ist, wurde diese Technik von Spammern missbraucht, um E-Mails zu validieren, und heutzutage zeigen die meisten Mail-Clients die Bilder aus diesem Grund nicht automatisch an. –

1

Sie können Verwenden Sie http://www.mailcounter.info kostenloser Service, um zu überprüfen, ob Ihre E-Mail gelesen wurde und wie oft sie vom Benutzer gelesen wurde. Es ist ein kostenloser Service.

+0

Hallo, dieser Service Link Ton geschlossen :( – Davide

1

was Sie tun sollten, ist tatsächlich überprüfen Sie den MX-Eintrag der Empfänger-E-Mail (DNS-MX-Abfrage der Domain Teil der E-Mail-Adresse) und senden Sie die Nachricht über den SMTP-Server, der gelöst wird.

auf diese Weise, wenn der MX-Datensatz nicht gefunden wird, erhalten Sie einen "Hard Bounce", wenn es gefunden wird, aber die Sendemethode löst eine Ausnahme aus, erhalten Sie einen "Soft Bounce", und wenn es durch - Sie Erhalten Sie einen "Erfolg".

Sie können das DNS-Projekt verwenden, um den MX-Datensatz aufzulösen. http://www.dnsjava.org/

0

Diese link könnte Ihnen helfen. Dies in einer experimentellen JAR-Datei, die RFC 3642 und RFC 3464 verwendet. Es hat einige grundlegende Klassen, mit denen Sie den Postzustellungsstatus erhalten können. Und auch Sie benötigen Javamail JAR-Datei.

Verwandte Themen