Produkt
Wenn Sie mit Go arbeiten und zuverlässige E-Mails für Anmeldungen, Bestellbestätigungen, Passwortrücksetzungen oder wichtige Mitteilungen benötigen, zeigt Ihnen dieser Leitfaden den schnellsten Weg.
Sie richten einen Absender ein, versenden Ihre erste Nachricht mit dem Go SDK von Mailjet und lernen Muster für Vorlagen, Anhänge, Massenversand, Webhooks und SMTP kennen.
Dies ist ein beispielorientierter, produktionsreifer Ansatz für die E-Mail-Integration.
Im Jahr 2009 veröffentlichte Google eine Sprache namens Go, die oft auch als „Golang“ bezeichnet wird. Go wurde als robuste serverseitige Programmiersprache eingeführt. Seitdem hat sie mit Low-Level-Programmiermustern und leistungsfähigen Datenstrukturen immer wieder ihr Versprechen erfüllt.
Dieser Leitfaden richtet sich an:
Bevor Sie beginnen, benötigen Sie Folgendes:
💡 Profi-Tipp: Authentifizieren Sie Ihre Domain über SPF/DKIM, um die Zustellraten im Posteingang zu verbessern. Einzelheiten und Beispiele zur Einrichtung finden Sie in unserer umfassenden Authentifizierungsanleitung.
Mit dem offiziellen Mailjet Go SDK und der v3.1 Send API können Sie schon in kurzer Zeit E-Mails versenden.
Installieren Sie zunächst das Mailjet Go SDK:
go get github.com/mailjet/mailjet-apiv3-go/v4
Setzen Sie dann Ihre Umgebungsvariablen:
export MJ_APIKEY_PUBLIC=your_api_key
export MJ_APIKEY_PRIVATE=your_secret_key
export SENDER_EMAIL=your_verified_sender@yourdomain.com
Erstellen Sie eine main.go-Datei mit dem folgenden Code:
package main
import (
"fmt"
"log"
"os"
"github.com/mailjet/mailjet-apiv3-go/v4"
)
func main() {
mj := mailjet.NewMailjetClient(os.Getenv("MJ_APIKEY_PUBLIC"), os.Getenv("MJ_APIKEY_PRIVATE"))
msgs := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{Email: os.Getenv("SENDER_EMAIL"), Name: "Go App"},
To: &mailjet.RecipientsV31{
{Email: "recipient@example.com", Name: "Recipient"},
},
Subject: "Hello from Go + Mailjet",
TextPart: "This is a plain-text fallback.",
HTMLPart: "<h3>Hello from Go + Mailjet</h3><p>It works.</p>",
},
}
messages := mailjet.MessagesV31{Info: msgs}
res, err := mj.SendMailV31(&messages)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Status: %+v\n", res)
}
Das Go SDK wrappt die REST-Endpunkte von Mailjet und bietet einen praktischen SendMailV31-Helper, der ein Messages-Array akzeptiert. Mit diesem Ansatz können Sie die volle Leistung der Mailjet-API mit minimalem Code nutzen.
Wenn Sie SMTP bevorzugen oder bereits einen SMTP-MTA verwenden, können Sie das SMTP-Relay von Mailjet mit Ihren API-Anmeldeinformationen nutzen.
package main
import (
"net/smtp"
"os"
)
func main() {
host := "in-v3.mailjet.com"
auth := smtp.PlainAuth("", os.Getenv("MJ_APIKEY_PUBLIC"), os.Getenv("MJ_APIKEY_PRIVATE"), host)
to := []string{"recipient@example.com"}
from := "sender@yourdomain.com"
msg := []byte(
"To: recipient@example.com\r\n" +
"From: Go App <sender@yourdomain.com>\r\n" +
"Subject: SMTP from Go via Mailjet\r\n" +
"MIME-Version: 1.0\r\n" +
"Content-Type: text/html; charset=UTF-8\r\n\r\n" +
"<p>Hello via SMTP</p>",
)
// Port 587 (TLS) or 465 (SSL) are common choices
err := smtp.SendMail(host+":587", auth, from, to, msg)
if err != nil {
log.Fatal(err)
}
}
Weitere Einzelheiten finden Sie im SMTP-Konfigurationsleitfaden.
Entwerfen Sie Ihre E-Mail-Vorlage einmal im Mailjet-Dashboard und nutzen Sie dann eine TemplateID und Variablen aus Ihrem Go-Code für dynamische Inhalte.
msgs := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{Email: os.Getenv("SENDER_EMAIL"), Name: "Go App"},
To: &mailjet.RecipientsV31{{Email: "recipient@example.com", Name: "Terry"}},
TemplateID: 123456, // ersetzen durch Ihre Template-ID
TemplateLanguage: true, // Mailjet-Template-Sprache aktivieren
Variables: map[string]any{"first_name": "Terry", "plan": "Pro"},
Subject: "Willkommen, {{var:first_name:\"neues Mitglied\"}}",
},
}
Weitere Beispiele für Vorlagen finden Sie in dieser Stack-Overflow-Diskussion.
Versenden Sie Anhänge und betten Sie Inline-Bilder in Ihre E-Mails ein. Die Gesamtgröße einer Nachricht ist auf 15 MB begrenzt.
// Zuerst lesen und Ihre Dateien base64-kodieren, dann:
msgs := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{Email: os.Getenv("SENDER_EMAIL")},
To: &mailjet.RecipientsV31{{Email: "recipient@example.com"}},
Subject: "Rechnung im Anhang + Inline-Logo",
HTMLPart: `<p>Vielen Dank für Ihren Kauf!</p><img src="cid:logo1" alt="Firmenlogo"/>`,
Attachments: &[]mailjet.AttachmentV31{
{
ContentType: "application/pdf",
Filename: "rechnung.pdf",
Base64Content: "<BASE64_STRING>", // Ihre base64-kodierte PDF-Datei
},
},
InlinedAttachments: &[]mailjet.InlinedAttachmentV31{
{
AttachmentV31: mailjet.AttachmentV31{
ContentType: "image/png",
Filename: "logo.png",
Base64Inhalt: "<BASE64_PNG>", // Ihr base64-kodiertes Bild
},
ContentID: "logo1", // in HTML referenziert als cid:logo1
},
},
},
}
Senden Sie mehrere personalisierte Nachrichten mit einem einzigen API-Aufruf. Jede Nachricht wird unabhängig validiert, sodass erfolgreiche Nachrichten auch dann gesendet werden, wenn eine fehlschlägt.
msgs := []mailjet.InfoMessagesV31{
{
From: &mailjet.RecipientV31{Email: os.Getenv("SENDER_EMAIL")},
To: &mailjet.RecipientsV31{{Email: "user1@example.com"}},
Subject: "Willkommen, Nutzer 1!",
HTMLPart: "<p>Hello User 1</p>",
},
{
From: &mailjet.RecipientV31{Email: os.Getenv("SENDER_EMAIL")},
To: &mailjet.RecipientsV31{{Email: "user2@example.com"}},
Betreff: "Willkommen, Nutzer 2!",
HTMLPart: "<p>Hello User 2</p>",
},
}
res, err := mj.SendMailV31(&mailjet.MessagesV31{Info: msgs})
if err != nil {
log.Fatal(err)
}
// Ergebnisse verarbeiten – jede Nachricht erhält ihren eigenen Status und ihre eigene ID
for i, result := range res.ResultsV31 {
fmt.Printf("Message %d: Status=%s, MessageID=%d\n", i, result.Status, result.To[0].MessageID)
}
Die Sende-API v3.1 gibt den Status und die IDs der einzelnen Nachrichten zurück, sodass Sie die Ergebnisse leicht mit Ihren ursprünglichen Nachrichten korrelieren können. Verwenden Sie die MessageID, um den Lieferstatus später zu verfolgen.
Konfigurieren Sie Webhooks, um Echtzeit-Benachrichtigungen über E-Mail-Ereignisse wie Zustellung, Öffnungen, Klicks, Bounces und Abmeldungen zu erhalten.
package main
import (
"encoding/json"
"net/http"
"log"
)
type MailjetEvent struct {
Event string `json:"event"`
Time int64 `json:"time"`
MessageID int64 `json:"MessageID"`
Email string `json:"email"`
URL string `json:"url,omitempty"` // für Klick-Ereignisse
Error string `json:"error,omitempty"` // für Bounce-/Fehlerereignisse
}
func webhookHandler(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
var events []MailjetEvent
if err := json.NewDecoder(r.Body).Decode(&events); err != nil {
http.Error(w, "bad request", http.StatusBadRequest)
return
}
// Ereignisse verarbeiten (überlegen Sie, für die Produktion eine Warteschlange zu verwenden)
for _, event := range events {
switch event.Event {
case "sent":
log.Printf("Message %d sent to %s", event.MessageID, event.Email)
case "open":
log.Printf("Message %d opened by %s", event.MessageID, event.Email)
case "click":
log.Printf("Message %d clicked by %s (URL: %s)", event.MessageID, event.Email, event.URL)
case "bounce":
log.Printf("Message %d bounced for %s: %s", event.MessageID, event.Email, event.Error)
}
}
// Immer 200 zurückgeben, um den Empfang zu bestätigen
w.WriteHeader(http.StatusOK)
}
func main() {
http.HandleFunc("/mj/events", webhookHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Die vollständige Ereignisdokumentation finden Sie im Leitfaden zur Ereignisverfolgungs-API.
Behalten Sie die folgenden drei Grundlagen der Zustellbarkeit im Kopf:
Richten Sie SPF- und DKIM-Authentifizierung für Ihre Absenderdomäne ein, um die Posteingangsplatzierung zu verbessern und das Risiko von Spoofing zu verringern:
Befolgen Sie unseren vollständigen Leitfaden zur Domain-Authentifizierung für schrittweise Anweisungen zur Einrichtung.
Wenn sich Ihr Mailjet-Konto in der US-Infrastruktur befindet, konfigurieren Sie das SDK so, dass es den US-API-Endpunkt verwendet:
// Für Konten in der US-Region
mj := mailjet.NewMailjetClient(apiKey, secretKey)
mj.SetAPIBase("https://api.us.mailjet.com/v3.1/")
Hinweise zur Firewall: Testen Sie den Port-Zugang Ihres Netzwerks; viele Anbieter blockieren Port 25
Hier sind die häufigsten Probleme und ihre Behebung.
Verwenden Sie das offizielle SDK mit SendMailV31, wie im Abschnitt Schnellstart beschrieben. Sobald Ihre API-Schlüssel konfiguriert sind, benötigt es nur einen einzigen Funktionsaufruf.
Ja! Lenken Sie das net/smtp-Paket von Go auf in-v3.mailjet.com, indem Sie Ihren API-Schlüssel und geheimen Schlüssel als Anmeldeinformationen verwenden, und nutzen Sie Port 587 oder 465.
Legen Sie TemplateID fest, aktivieren Sie TemplateLanguage: true, und geben Sie Ihre Daten im Feld Variables ein. Verwenden Sie die Syntax {{var:name:“default“}} in Ihren Vorlagen.
Verwenden Sie Webhooks für Echtzeit-Ereignisdaten, oder prüfen Sie das Mailjet-Dashboard und die REST-API-Statistikendpunkte für aggregierte Metriken.
Jetzt, wo der E-Mail-Versand in Ihrer Go-Anwendung funktioniert, können Sie über folgende Verbesserungen nachdenken:
Auf dieser Grundlage sind Sie in der Lage, robuste, skalierbare E-Mail-Funktionen in Ihre Go-Anwendungen zu integrieren. Die Kombination aus der zuverlässigen Infrastruktur von Mailjet und der Leistung von Go sorgt für eine leistungsstarke E-Mail-Lösung.