Anleitung
Anhänge
Hängen Sie Dateien an API-E-Mails als Base64-Inhalt oder über eine URL an, betten Sie Bilder mit Content-ID ein und bleiben Sie innerhalb der erlaubten Dateitypen und Größenlimits.
Diese Seite zeigt, wie Sie Dateien an E-Mails anhängen, die Sie mit POST /emails senden, entweder als Base64-kodierten Inhalt oder indem Emailit sie von einer URL herunterlädt. Sie behandelt außerdem eingebettete Bilder, erlaubte Dateitypen und Größenlimits.
Felder für Anhänge
Übergeben Sie ein Array attachments. Jedes Element ist ein Objekt mit diesen Feldern:
filenamestringerforderlichcontentstringcontent oder url, nicht beides.urlstringhttp://- oder https://-URL, von der Emailit die Datei herunterlädt. Verwenden Sie entweder content oder url, nicht beides.content_typestringapplication/pdf. Erforderlich mit content. Mit url ist der Standardwert der Content-Type, den der Server zurückgibt.content_idstringcid: anzeigen kann.encodingstringStandardwert: base64content kodiert ist. Lassen Sie den Wert auf base64, sofern Sie keinen Grund haben, ihn zu ändern.Datei als Base64 anhängen
Lesen Sie die Datei, kodieren Sie sie als Base64 und senden Sie sie mit ihrem MIME-Typ.
curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"from\": \"Acme Billing <billing@acme.com>\",
\"to\": \"ada@example.com\",
\"subject\": \"Invoice INV-1042\",
\"text\": \"Your invoice is attached.\",
\"attachments\": [{
\"filename\": \"INV-1042.pdf\",
\"content\": \"$(base64 < INV-1042.pdf | tr -d '\n')\",
\"content_type\": \"application/pdf\"
}]
}"import { readFile } from 'node:fs/promises';
import { Emailit } from '@emailit/node';
const emailit = new Emailit(process.env.EMAILIT_API_KEY);
const pdf = await readFile('INV-1042.pdf');
await emailit.emails.send({
from: 'Acme Billing <billing@acme.com>',
to: 'ada@example.com',
subject: 'Invoice INV-1042',
text: 'Your invoice is attached.',
attachments: [
{
filename: 'INV-1042.pdf',
content: pdf.toString('base64'),
content_type: 'application/pdf',
},
],
});import base64
import os
from emailit import EmailitClient
client = EmailitClient(os.environ["EMAILIT_API_KEY"])
with open("INV-1042.pdf", "rb") as f:
pdf = base64.b64encode(f.read()).decode("ascii")
client.emails.send({
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Invoice INV-1042",
"text": "Your invoice is attached.",
"attachments": [{
"filename": "INV-1042.pdf",
"content": pdf,
"content_type": "application/pdf",
}],
})$emailit = Emailit::client(getenv('EMAILIT_API_KEY'));
$emailit->emails()->send([
'from' => 'Acme Billing <billing@acme.com>',
'to' => 'ada@example.com',
'subject' => 'Invoice INV-1042',
'text' => 'Your invoice is attached.',
'attachments' => [[
'filename' => 'INV-1042.pdf',
'content' => base64_encode(file_get_contents('INV-1042.pdf')),
'content_type' => 'application/pdf',
]],
]);Datei über eine URL anhängen
Statt die Datei selbst zu kodieren, geben Sie Emailit eine url. Emailit lädt die Datei herunter, während es die Nachricht erstellt. Die Anfrage dauert also so lange wie der Download.
{
"from": "Acme Billing <billing@acme.com>",
"to": "ada@example.com",
"subject": "Invoice INV-1042",
"text": "Your invoice is attached.",
"attachments": [
{
"filename": "INV-1042.pdf",
"url": "https://files.acme.com/invoices/INV-1042.pdf"
}
]
}Die URL muss diese Regeln erfüllen, sonst schlägt die Anfrage mit 422 und Attachment error fehl:
- Sie verwendet
httpoderhttpsund zeigt auf einen öffentlichen Host. Private und interne Adressen werden abgelehnt. - Sie liefert die Datei direkt mit einem
2xx-Status. Weiterleitungen werden nicht verfolgt. - Der Download ist innerhalb von 30 Sekunden abgeschlossen.
- Die Datei ist nicht größer als 25 MB, laut ihrem Header
Content-Length.
Emailit erstellt für jeden Empfänger eine eigene Kopie der Nachricht und lädt URL-Anhänge für jede Kopie herunter. Stellen Sie sicher, dass signierte oder ablaufende URLs während der gesamten Anfrage gültig bleiben und dass der Datei-Host einen Download pro Empfänger verkraftet.
Bilder einbetten
Um ein Bild im HTML-Inhalt statt als separaten Anhang anzuzeigen, geben Sie ihm eine content_id und verweisen Sie in einem img-Tag mit cid: auf diese ID.
{
"from": "Acme <hello@acme.com>",
"to": "ada@example.com",
"subject": "Your weekly report",
"html": "<p><img src=\"cid:chart-week-40\" alt=\"Weekly signups\" width=\"600\"></p>",
"attachments": [
{
"filename": "chart.png",
"content": "iVBORw0KGgoAAAANSUhEUgAA...",
"content_type": "image/png",
"content_id": "chart-week-40"
}
]
}Die content_id im Anhang und der Wert nach cid: müssen genau übereinstimmen. Eingebettete Bilder machen die Nachricht für jeden Empfänger größer. Für Logos und andere wiederverwendete Bilder ist eine gehostete Bild-URL im HTML daher meist die bessere Wahl.
Größenlimits
| Limit | Wert |
|---|---|
| Gesamte Nachricht, nach der Kodierung | 40 MB. Größere Nachrichten schlagen mit 413 Message too large fehl. |
Ein von url heruntergeladener Anhang |
25 MB |
Download-Timeout für url |
30 Sekunden |
| JSON-Anfrage-Body | 50 MB |
Base64-Kodierung macht Dateien etwa ein Drittel größer, und das Limit von 40 MB gilt für die kodierte Nachricht. In der Praxis sollte die Gesamtgröße Ihrer Dateien unter etwa 29 MB bleiben. Laden Sie alles, was größer ist, in Ihren eigenen Speicher hoch und senden Sie einen Link.
Erlaubte Dateitypen
filename muss auf eine dieser Endungen enden. Jede andere Endung oder ein Name ohne Endung schlägt bei der Validierung mit 400 fehl.
| Kategorie | Endungen |
|---|---|
| Text | .txt, .csv, .log, .css, .ics, .xml |
| Bilder | .jpg, .jpe, .jpeg, .gif, .png, .bmp, .psd, .tif, .tiff, .svg, .indd, .ai, .eps |
| Dokumente | .doc, .docx, .rtf, .odt, .ott, .pdf, .pub, .pages, .mobi, .epub |
| Audio | .mp3, .m4a, .m4v, .wma, .ogg, .flac, .wav, .aif, .aifc, .aiff |
| Video | .mp4, .mov, .avi, .mkv, .mpeg, .mpg, .wmv |
| Tabellen | .xls, .xlsx, .ods, .numbers |
| Präsentationen | .odp, .ppt, .pptx, .pps, .key |
| Archive und Kontakte | .zip, .vcf |
.eml |
|
| Signaturen und Verschlüsselung | .p7c, .p7m, .p7s, .pgp, .asc, .sig |
Ausführbare Dateien und Skripte stehen nicht auf der Liste und lassen sich nicht anhängen.
Anhänge einer gesendeten E-Mail lesen
Anhänge auflisten (GET /emails/{id}/attachments) gibt jeden Anhang mit filename, content_type, size, content_id, content_disposition (attachment oder inline) und dem Base64-kodierten content zurück. Dafür ist ein Schlüssel mit Full Access nötig. Anhänge werden zusammen mit den Nachrichteninhalten gelöscht, wenn Ihre Aufbewahrungsdauer endet.
Fehlerbehebung
| Fehler | Was Sie prüfen sollten |
|---|---|
Attachment at index 0 missing content_type (required when using 'content') |
Fügen Sie jedem Base64-Anhang content_type hinzu. |
Attachment 'report.exe' has unsupported file type '.exe' |
Verwenden Sie eine erlaubte Endung oder packen Sie die Datei in eine .zip. |
Attachment at index 0 cannot have both 'content' and 'url' |
Senden Sie nur eines der beiden Felder. |
Attachment error mit Failed to fetch attachment |
Die URL hat einen Fehlerstatus geliefert, weitergeleitet, ein Timeout erreicht oder ist nicht öffentlich. Öffnen Sie sie zur Prüfung von einem Server außerhalb Ihres Netzwerks. |
Attachment error mit Attachment too large (max 25MB) |
Hosten Sie die Datei und senden Sie stattdessen einen Link. |
413 Message too large |
Verringern Sie die Gesamtgröße der Anhänge. |
Siehe auch
- E-Mail senden
- E-Mail senden in der API-Referenz
- Datenaufbewahrung