Zur Dokumentation springen
C#

Eine E-Mail senden

Eine Nachricht jetzt oder später, mit Anhängen, oder hundert in einer Anfrage.

Eine Nachricht senden

send.cs
var sent = await client.Emails.SendAsync(new Body{    ["from"] = "Acme Billing <[email protected]>",    ["to"] = new[] { "[email protected]", "[email protected]" },    ["replyTo"] = "[email protected]",    ["subject"] = "Your September invoice",    ["html"] = "<p>The invoice is attached.</p>",    ["text"] = "The invoice is attached.",    ["tags"] = new Body { ["invoice"] = "inv_2026_09_4192" },}); Console.WriteLine($"{sent["id"]} {sent["status"]}");

to, cc und bcc nehmen eine Adresse oder eine Liste, und eine Adresse ist Text wie Ada <[email protected]> oder ein Dictionary mit email und name. Der Inhalt kommt aus html und text, aus einem gespeicherten template oder aus einer draftId.

Jeder Versand trägt einen Idempotenzschlüssel. Der Client erzeugt einen pro Aufruf und verwendet ihn bei Wiederholungen erneut, sodass eine wiederholte Anfrage die erste Nachricht erneut ausgibt. Übergeben Sie idempotencyKey:, damit das auch über Prozesse und Neustarts hinweg gilt.

Anhänge

attachments.cs
await using var invoice = File.OpenRead("invoice.pdf"); await client.Emails.SendAsync(new Body{    ["from"] = "[email protected]",    ["to"] = "[email protected]",    ["subject"] = "Your September invoice",    ["text"] = "The invoice is attached.",    ["attachments"] = new[]    {        new Body { ["filename"] = "invoice.pdf", ["content"] = invoice, ["contentType"] = "application/pdf" },        new Body { ["fileId"] = "file_3f9c2a7b1e4d8f60a5c7b92d" },    },});

content nimmt ein byte[] oder einen lesbaren Stream, die der Client als Base64 kodiert, oder Text, der schon Base64 ist. fileId benennt eine Datei, die mit client.Files.UploadAsync() hochgeladen wurde, und so wird eine Datei über 5 MB gesendet.

Später senden

schedule.cs
var scheduled = await client.Emails.SendAsync(new Body{    ["from"] = "[email protected]",    ["to"] = "[email protected]",    ["subject"] = "Your invoice is due tomorrow",    ["text"] = "A reminder that the invoice is due tomorrow.",    ["scheduledAt"] = DateTimeOffset.UtcNow.AddDays(1),}); var id = scheduled["id"]!.GetValue<string>(); await client.Emails.RescheduleAsync(id, DateTimeOffset.UtcNow.AddDays(2)); var cancelled = await client.Emails.CancelAsync(id); Console.WriteLine(cancelled["status"]);

scheduledAt nimmt ein DateTimeOffset, einen ISO-8601-Zeitpunkt oder eine Dauer wie PT1H. Ein DateTimeOffset an beliebiger Stelle eines Körpers wird als ISO-8601-Zeitpunkt in UTC gesendet. Eine geplante Nachricht kann geändert oder abgebrochen werden, bis sie rausgeht.

Einen Batch senden

batch.cs
var result = await client.Emails.SendBatchAsync(new[]{    new Body { ["from"] = "[email protected]", ["to"] = "[email protected]", ["subject"] = "Order AC-4192 has shipped", ["text"] = "It is on its way." },    new Body { ["from"] = "[email protected]", ["to"] = "[email protected]", ["subject"] = "Order AC-4193 has shipped", ["text"] = "It is on its way." },}); Console.WriteLine($"{result.Sent} sent, {result.Failed} failed"); foreach (var item in result){    if ((string?)item["status"] == "error")    {        Console.WriteLine($"{item["index"]} {item["error"]?["message"]}");    }}

Ein Stapel fasst bis zu 100 Nachrichten und ist nie alles oder nichts: Eine fehlerhafte Adresse lässt nur ihren eigenen Eintrag scheitern, und der Rest geht trotzdem raus. Prüfen Sie Failed und den status jedes Eintrags, statt sich auf eine Ausnahme zu verlassen.