Zum Inhalt springen

Anhänge

attachments ist ein Array mit bis zu 50 Objekten. Jeder Anhang braucht einen filename und genau eines von content oder path.

filenamestringerforderlich

1 bis 255 Zeichen. Wird dem Empfänger angezeigt.

contentstringoptional

Dateiinhalt als Base64. Das SDK akzeptiert auch einen Buffer/Uint8Array und kodiert ihn für dich. Verwende dieses Feld oder path.

pathstringoptional

Eine öffentliche https-URL. SpacePost lädt sie herunter, wenn die E-Mail gesendet wird. Verwende dieses Feld oder content.

content_typestringoptional

MIME-Typ, etwa application/pdf. Alias contentType im SDK.

content_idstringoptional

Macht den Anhang zu einem Inline-Anhang, den du in deinem HTML als cid:<content_id> referenzieren kannst. Alias contentId im SDK.

  • Die gesamte Nachricht muss einschließlich aller Anhänge nach der Base64-Kodierung unter 40 MB liegen. Base64 bläht Dateien um etwa 33 % auf, halte die Rohgröße deshalb insgesamt unter etwa 30 MB.
  • URL-Anhänge (path) müssen https verwenden, auf eine öffentliche Adresse auflösen (private Netzwerke werden abgelehnt), werden mit einem Timeout von 10 Sekunden abgerufen und dürfen nicht weiterleiten. Schlägt der Abruf fehl, wird die E-Mail als failed markiert.
  • Die Bytes der Anhänge werden aus dem Speicher entfernt, sobald die E-Mail gesendet wurde; im Log bleiben nur Metadaten (Name, Typ, Größe) erhalten.
attachment.ts
import { readFile } from "node:fs/promises";
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);
const { data, error } = await spacepost.emails.send({
from: "Acme <billing@acme.com>",
to: "user@example.com",
subject: "Invoice 1042",
text: "Your invoice is attached.",
attachments: [{ filename: "invoice-1042.pdf", content: await readFile("invoice-1042.pdf"), contentType: "application/pdf" }],
});
console.log(error ?? data);
{
"from": "Acme <billing@acme.com>",
"to": ["user@example.com"],
"subject": "Your report",
"text": "Report attached.",
"attachments": [{ "filename": "report.pdf", "path": "https://files.acme.com/reports/2026-10.pdf" }]
}

Setze eine content_id und referenziere sie in deinem HTML mit einer cid:-URL.

inline-image.ts
import { readFile } from "node:fs/promises";
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);
await spacepost.emails.send({
from: "Acme <hello@acme.com>",
to: "user@example.com",
subject: "Welcome",
html: '<img src="cid:logo" alt="Acme" width="120" /><p>Welcome aboard.</p>',
attachments: [{ filename: "logo.png", content: await readFile("logo.png"), contentType: "image/png", contentId: "logo" }],
});

Inline-Bilder werden als Teil der Nachricht gesendet und ohne Netzwerkanfrage angezeigt, doch viele Clients (insbesondere Gmail im Web) stellen sie am besten dar, wenn sie klein sind. Hoste große Bilder auf deinem eigenen CDN und verwende eine normale https://-URL.