2010-01-25 4 views
6

Die aktuelle Anwendung verwendet Simple Java Mail, um paar E-Mails pro Tag zu senden, aber einige der E-Mails kommen nie zum Client.Wie kann ich die Versand- und Lieferzuverlässigkeit von E-Mails verbessern?

auf dem Anwendungsserver Basierend meldet es paar Mail-Server Timeouts war aber, dass die Fälle, alle fehlenden E-Mails nicht erklären. Das Hinzufügen einer Wiederholungsfunktion würde mit dem Zeitlimitproblem helfen, aber gibt es andere Ansätze, um die E-Mail-Zuverlässigkeit im Allgemeinen zu verbessern?

Antwort

3

Es ist die Art von SMTP, dass es nicht die Transaktionsintegrität nicht implementiert.

etwa 6 Jahren habe ich eine ziemlich detaillierte Analyse, warum E-Mails von der Firma, die ich wurde dann arbeiten versagten. Ich konnte nur bis zum empfangenden MTA sehen, aber dies zeigte eine sehr starke Korrelation zwischen der Art des MTA und der Fehlerrate (zu dieser Zeit waren Novell Groupwise und Sendmail am Remote-Ende am zuverlässigsten, MSExchange am wenigsten, mit qmail und andere in der Mitte). Beachten Sie, dass dies sehr empirisch war und möglicherweise die Produktauswahl im Vergleich zu verfügbaren Fähigkeiten widerspiegelte und nicht intrinsische Probleme in bestimmten MTAs - und es ist jetzt ziemlich veraltet. Außerdem ist es nicht etwas, das Sie effektiv kontrollieren können.

Obwohl, da Sie die Möglichkeit haben Ihre eigene Logik auf dem MTA, gibt es keine Garantie zu entwickeln und umzusetzen, dass:

1), wenn eine Meldung jeden Sie erhalten nach dem Verlassen Ihres MTA schlägt fehl Bounce-Meldung zurück

2), wenn Sie eine Nachricht mit einer DSN-Anfrage (siehe RFC 1891) senden, dass das entfernte System zurückschicken tatsächlich die DSN

die wichtigsten Dinge, die Sie tun können, die Zustellbarkeit zu verbessern, ist zu wissen, viel über SMTP, pflegen Sie Ihren eigenen MTA und konfigurieren Sie ihn entsprechend. Eines der Hauptprobleme heutzutage ist, dass jeder versucht, Spam zu stoppen - und jeder hat seine eigene Methode, dies zu tun. Und normalerweise erzählen sie dir nicht das Rezept für ihre geheime Soße. In der Tat, mit Bayesian Filterung, wissen sie vielleicht nicht einmal!

Ich denke, die nächste Anlaufstelle (nachdem Sie Ihre SPF ist restriktiv und veröffentlicht, und das Sie nicht RBL'd) wäre zu prüfen, wie Sie feststellen, ob Ihre E-Mail geliefert wird - als Ich sagte, du kannst dich nicht auf DSNs verlassen. Sie können sich nicht darauf verlassen, dass Ihre E-Mails abgehört werden (z. B. indem Sie sie als HTML versenden), da die meisten MUAs keinen Remote-Inhalt laden (wiederum um Spam zu verhindern). Das lässt nur die Option übrig, den Inhalt serverseitig zu halten und einen anklickbaren Link zum ursprünglichen Inhalt zu senden. Aber das setzt wiederum voraus, dass Ihre Empfänger Ihre Nachricht immer lesen möchten.

C.

1

Wenn Sie nur ein paar E-Mails pro Tag zu einer endlichen Menge von Empfängern gesendet werden sollen und das ist alles, versuchen, sie durch ein Google Mail-Konto zu senden.

+0

Erste Java-Mail über einen Google SMTP-Server senden finden erfordert ein wenig Java Voodoo und ein Konto zur Autorisierung mit. Ich habe das selbst nicht gemacht, aber ich wäre ziemlich sicher, dass die Frage auf StackOverflow gestellt wurde. –

2

eine Produktionsqualität Mail-Server zur Verfügung zu Ihrer Anwendung einrichten, und lassen Sie sie senden alle sehr schmutzigen Details von zuverlässigen Mail behandeln. Sie treffen wahrscheinlich einige Einschränkungen wie Graylisting, um Spambots fernzuhalten.

Ein ziemlich einfaches Szenario wäre Postfix auf einem Linux-Rechner. Ich persönlich mag Ubuntu

2

Thorbjørn und symcbean haben beide zur Verfügung gestellt viele nützliche Informationen, aber es kann in seiner Vollständigkeit überwältigend sein.Ich werde versuchen, es ansprechbarer zu machen:

Über das Schlimmste, was Sie tun können, ist ein SMTP-Client in Ihrer Anwendung zu bauen und darauf verlassen, um E-Mail an irgendwo in der Welt zu senden. Eine viel bessere Lösung ist es, einen "Standard" -MTA- und/oder SMTP-Server auf Ihrer eigenen Box lokal oder im schlimmsten Fall in Ihrem eigenen Netzwerk zu betreiben.

Ihre App muss also nur E-Mails erhalten, so weit wie Ihr eigener Mail-Server, der hoffentlich auf Port 25 auf demselben Rechner sein wird. Keine SSL-Verschlüsselung, keine Spam-Filterung, nicht viele Dinge, die schiefgehen können. Wenn sich Ihr E-Mail-Server auf dem gleichen Computer wie Ihre App befindet, sind beide (beide) entweder nicht erreichbar oder beide auf dem neuesten Stand.

Sobald Ihre App ihre E-Mails in Ihren lokalen E-Mail-Server verschoben hat (was schnell und nahezu idiotensicher ist), ist es das Problem dieses Servers, die E-Mail an das endgültige Ziel zu senden. Auf einem Linux-Server ist etwas wie Sendmail, qmail, exim oder postfix installiert; unter Windows weiß ich nicht.

Jeder dieser "out of the box" -Mail-Server ist sehr kompetent, um E-Mails zu erhalten. Eine automatische Wiederholung ist bereits eingebaut, mit Wiederholungen nach (z. B.) 1 Stunde, 2 Stunden, 4, 12, 24 und 48 Stunden. Ihr E-Mail-Server wird versuchen, Ihre E-Mails zu übermitteln, und zwar ohne zusätzlichen Aufwand. Fehlgeschlagene Versuche werden im Protokoll des Mail-Servers angezeigt. Sie können dies analysieren und Ihre Schlussfolgerungen ziehen. Wenn es nach dem letzten möglichen Versuch fehlschlägt, wird dies auch in der Protokolldatei vermerkt, und Sie können daraus schließen, dass auf der Empfängerseite etwas nicht stimmte. All diese Kraft ist bereits eingebaut, und Sie sollten nicht einmal daran denken, es zu einem eigenen Mail-Client zu machen.

Schlussbemerkung: Es ist möglich, dass die Übertragung physisch erfolgreich ist, d. H. Die Nachricht wurde geliefert, aber dann wurde sie vom Mailserver oder Client des Empfängers als Spam behandelt; oder der (menschliche) Empfänger löschte es einfach durch Zufall. Keine Software wird dieses Problem mit Sicherheit lösen.

2

Meiner Meinung nach gehört der Betrieb eines eigenen Mailservers schnell der Vergangenheit an.

Wenn meine App mehr als ein paar E-Mails sendet, richte ich normalerweise einen E-Mail-Dienst ein und vergesse es. Die meisten von ihnen lassen Sie einfach ihre SMTP in Ihrer Anwendung verwenden.

Als Bonus, die meisten von ihnen zeigen Ihnen Statistiken darüber, wer was mit Ihren E-Mails macht.

Einige der bekanntesten Namen in diesem Raum sind sendgrid, mailjet und postmarkApp, aber Sie einen interessanten Vergleich here

+0

Ja, ich stimme dem jetzt vollkommen zu. –