Eine Geschichte, die die Implementierung der SendGrid-Java-Bibliothek bestätigt, wenn die E-Mail-Zustellung fehlschlägt

Vorwort

Ich schreibe eine Webanwendung in Java. Ich verwende SendGrid, um E-Mails vom System zuzustellen, aber wenn die E-Mail-Zustellung aus irgendeinem Grund fehlschlägt, nachdem ich angenommen habe Da die Verarbeitung Moos war, werde ich es als Memorandum schreiben. ~~ Alles war eine Implementierung, die aus der Überzeugung des Vorgängers entstand, dass "eine Antwort auch im Fehlerfall ein Ergebnis zurückgibt". ~~

Erstellen Sie den E-Mail-Zustellungsprozess mit SendGrid

Installieren Sie SendGrid Java Library in build.gradle, um eine E-Mail-Versandmethode zu erstellen. Wenn SendGrid in den 400er Jahren einen Fehler zurückgibt, wird dieser aufgrund eines unvollständigen Anforderungsparameters, der von hier gesendet wurde, oder einer übermäßigen Anforderung nicht wiederholt. Es wird ein Protokoll hinterlassen und Fehlerinformationen an die Vorderseite zurückgegeben, um den Prozess zu beenden. Bei der 500er-Serie ist ein Fehler im SendGrid-Server aufgetreten, daher habe ich ihn erstellt, um ihn 2-3 Mal zu versuchen.

Referenz: SendGrid: Statuscode und Fehler

dependencies {
    compile ('com.sendgrid:sendgrid-java:4.0.1')
}
import com.sendgrid.*;
import java.io.IOException;

public class Example {
  public static void main(String[] args) throws IOException {
    SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
    try {
      Request request = new Request();
      request.setMethod(Method.GET);
      request.setEndpoint("api_keys");
      Response response = sg.api(request);
      if (response.getStatusCode() < 300) {
            //Die Serie 200 wird weiterhin wie gewohnt übertragen
      } else if (response.getStatusCode() < 500){
            //Der Fehler der Serie 400 wird als ungültig beurteilt und die Verarbeitung endet
            //Hinterlassen Sie ein Protokoll und senden Sie die Fehlermeldung an die Vorderseite
      } else {
            //Der Fehler der Serie 500 wird aufgrund eines SendGrid-Serverfehlers mehrmals wiederholt
            //Bewahren Sie das Protokoll auf
      }
    } catch (IOException ex) {
      throw ex;
    }
  }
}

Das Problem, dass die erwartete Verarbeitung nicht durchgeführt wird

Ich habe es so erstellt, dass der Statuscode in der wie oben zurückgegebenen Antwort beurteilt und die nachfolgende Verarbeitung verteilt wird ~~ (Vorgänger) ~~. Beim Erstellen einer E-Mail ist ein Fehler in der Validierungsprüfung aufgetreten. Die Nachbearbeitung wird nicht durchgeführt, wenn die E-Mail nicht gesendet werden kann, und das erwartete Protokoll bleibt nicht erhalten. Daher stellt sich heraus, dass diese Implementierung fehlerhaft ist.

Überprüfen Sie die Implementierung

Folgen Sie der api () -Methode der Klasse com.sendgrid.SendGrid, um festzustellen, wohin Sie die Anforderung tatsächlich an SendGrid senden. (Weggelassen, da Sie es in 3-4 Schritten erreichen können)


private Response executeApiCall(HttpRequestBase httpPost) throws IOException {
	try {
		CloseableHttpResponse serverResponse = httpClient.execute(httpPost);
		try {
			Response response = getResponse(serverResponse);
			if(response.getStatusCode() >= 300) {
				//throwing IOException here to not break API behavior.
				throw new IOException("Request returned status Code "+response.getStatusCode()+"Body:"+response.getBody());
			}
			return response;
		} finally {
			serverResponse.close();
		}
	} catch(ClientProtocolException e) {
		throw new IOException(e.getMessage());
	}
}

Sie können sehen, dass die com.sendgrid.Client-Klasse eine executeApiCall () -Methode hat, die () in der 3. Zeile ausführt, und vor allem die if-Anweisung in der 6. Zeile löst eine IOException aus. Selbst wenn der Statuscode größer als 300 ist, können Sie die Antwort mit diesem Wert füllen und zurückgeben. .. ..

SebdGrid Rückgabewert und dann

Caused by: java.io.IOException: Request returned status Code 400Body:
{
    "errors": [
        {
            "message": "Invalid replyTo email address",
            "field": "reply_to",
            "help": null
        }
    ]
}

Da SendGrid eine Fehlermeldung wie oben zurückgibt, hätte ich die nachfolgende Verarbeitung von der abgefangenen IOException anstelle der Antwort schreiben sollen. In Anbetracht der Tatsache, dass in SendGrid in den letzten 1 bis 2 Jahren kein schwerwiegender Fehler aufgetreten zu sein scheint, und der Nutzungsrate von E-Mails wird der Wiederholungsvorgang gelöscht und eine Fehlermeldung schnell angezeigt (Validierungsprüfung wurde behoben). Der 400s-Fehler sollte also nicht auftreten!).

Verschiedene Gefühle

Es war ein verdächtiger Fall, in dem sich meine Annahmen und Mängel in verschiedenen Tests überschnitten, aber es war ein Ereignis, bei dem ich gelernt habe, den Rückgabewert der verwendeten Bibliothek zu überprüfen und zu verwenden.

Recommended Posts

Eine Geschichte, die die Implementierung der SendGrid-Java-Bibliothek bestätigt, wenn die E-Mail-Zustellung fehlschlägt
[Java] Beim Schreiben der Quelle ... Memorandum ①
[Java Edition] Geschichte der Serialisierung
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
Die Geschichte eines Game Launcher mit automatischer Ladefunktion [Java]
[Java small story] Überwachen Sie, wann der Liste ein Wert hinzugefügt wird
Die Geschichte des Schreibens von Java in Emacs
Die Geschichte des einfachen String-Vergleichs in Java
Die Geschichte eines gewöhnlichen Othello in Java
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
Die Geschichte der Initialisierung von Money :: Currency während des Testens
Eine Geschichte, dass eine Person, die ein solides iOS gemacht hat, möglicherweise von der Implementierung von Listener abhängig ist, wenn sie zu Android wechselt
Die Geschichte, einen Reverse-Proxy mit ProxyServlet zu erstellen
Awesome Java: Großartige Java Framework Library-Software
Eine Übersicht über das native Java-Framework Quarkus von Kubernetes
Die Geschichte von dto, dao-like mit Java, SQLite
Die Geschichte des Erstellens einer Java-Version des Minecraft-Servers mit GCP (und dem Festlegen einer weißen Liste)
Eine kurze Erklärung der fünf Arten von Java Static
20190803_Java & k8s on Azure Die Geschichte vom Festivalbesuch
Eine Geschichte voller Grundlagen von Spring Boot (gelöst)
[Java] Vereinfachen Sie die Implementierung der Datenverlaufsverwaltung mit Reladomo
Implementierung eines mathematischen Syntaxanalysators durch rekursive absteigende Syntaxanalysemethode (Java)
Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Die Geschichte, Java mithilfe der BitBucket-Pipeline nach Heroku zu bringen
Vergleich von Versionszeichenfolgen, wenn Sie die Verarbeitung zwischen zwei Versionen verzweigen möchten (Java-Implementierung)
Eine Geschichte, die mich bedauerte, als während der Entwicklung der Spring Boot-App eine "NotReadablePropertyException" auftrat.