Senden von E-Mails in Webanwendungen

Ich suche hier nach Meinungen, ich erstelle eine Webanwendung, die die Standardfunktionalität von: @ ha

Registrieren Sie sich für ein Konto, indem Sie ein Formular ausfüllen und abschicken.Eine E-Mail mit einem Bestätigungscode-Link erhaltenKlicken Sie auf den Link, um das neue Konto zu bestätigen und sich anzumelden

Wenn Sie E-Mails aus Ihrer Webanwendung senden, ist es häufig (normalerweise) der Fall, dass die Persistenzschicht geändert wird. Beispielsweise

Ein neuer Benutzer registriert sich für ein Konto auf Ihrer Website. Der neue Benutzer wird in der Datenbank erstellt und erhält eine E-Mail mit einem Bestätigungslink. Ein Benutzer weist einen Fehler oder ein Problem einer anderen Person zu - das Problem wird aktualisiert und E-Mail-Benachrichtigungen werden gesendet.

Wie Sie diese E-Mails senden, kann für den Erfolg Ihrer Bewerbung entscheidend sein. Wie Sie sie senden, hängt davon ab, wie wichtig es ist, dass der beabsichtigte Empfänger die E-Mail erhält.

Anhand von Beispiel 1 werden die folgenden vier Strategien in Bezug auf den Fall betrachtet, dass der Mail-Server heruntergefahren ist.

TRANSACTIONAL & SYNCHRONOUS Das Senden der E-Mail schlägt fehl und dem Benutzer wird eine Fehlermeldung angezeigt, die besagt, dass sein Konto nicht erstellt werden konnte. Die Anwendung scheint langsam zu sein und nicht zu reagieren, da sie auf das Zeitlimit für die Verbindung wartet. Das Konto wird nicht in der Datenbank erstellt, da die Transaktion zurückgesetzt wird.

TRANSACTIONAL & ASYNCHRONOUS Die Transaktionsdefinition bezieht sich hier auf das Senden der E-Mail an eine JMS-Warteschlange oder das Speichern in einer Datenbanktabelle, damit ein anderer Hintergrundprozess sie abholen und senden kann.

Das Benutzerkonto wird in der Datenbank erstellt und die E-Mail zur späteren Verarbeitung an eine JMS-Warteschlange gesendet. Die Transaktion ist erfolgreich und erfolgreich abgeschlossen. Dem Benutzer wird eine Nachricht angezeigt, die besagt, dass sein Konto erstellt wurde, und er muss in seiner E-Mail nach einem Bestätigungslink suchen. In diesem Fall kann es vorkommen, dass die E-Mail aufgrund eines anderen Fehlers nie gesendet wird. Dem Benutzer wird jedoch mitgeteilt, dass die E-Mail an ihn gesendet wurde. Es kann einige Zeit dauern, bis die E-Mail an den Benutzer gesendet wird, wenn der Anwendungssupport zur Diagnose des E-Mail-Problems hinzugezogen werden muss.

NON-TRANSACTIONAL & SYNCHRONOUS Der Benutzer wurde in der Datenbank erstellt, aber die Anwendung erhält einen Timeout-Fehler, wenn sie versucht, die E-Mail mit dem Bestätigungslink zu senden. Dem Benutzer wird eine Fehlermeldung angezeigt, die besagt, dass ein Fehler aufgetreten ist. Die Anwendung ist langsam und reagiert nicht mehr, da sie auf das Timeout der Verbindung wartet.

Wenn der Mail-Server wieder aktiviert wird und der Benutzer versucht, sich erneut zu registrieren, wird ihm mitgeteilt, dass sein Konto bereits vorhanden ist, jedoch noch nicht bestätigt wurde, und er kann die E-Mail erneut an ihn senden.

NON-TRANSACTIONAL & ASYNCHRONOUS Der einzige Unterschied zu transaktional & asynchron besteht darin, dass bei einem Fehler beim Senden der E-Mail an die JMS-Warteschlange oder beim Speichern in der Datenbank das Benutzerkonto weiterhin erstellt wird, die E-Mail jedoch erst am gesendet wird Benutzer versucht erneut, sich zu registrieren.

Was würde ich gerne wissen, was andere Leute hier gemacht haben? Können Sie andere Lösungen als die 4 empfehlen, die ich oben erwähnt habe? Was ist ein vernünftiger Weg, um dieses Problem anzugehen? Ich möchte kein System übertreiben, das mit der (hoffentlich) seltenen Situation fertig wird, in der mein Mailserver ausfällt!

Das Einfachste ist, es synchron zu codieren. Gibt es jedoch noch andere Gefahren für diesen Ansatz? Ich frage mich wohl, ob es eine bewährte Methode gibt. Ich konnte da nicht viel herausfinden, indem ich googelte.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage