Salta ai contenuti

Allegati

attachments è un array di fino a 50 oggetti. Ogni allegato richiede un filename e esattamente uno tra content e path.

filenamestringobbligatorio

Da 1 a 255 caratteri. Mostrato al destinatario.

contentstringopzionale

I byte del file in base64. L'SDK accetta anche un Buffer/Uint8Array e lo codifica per te. Usa questo oppure path.

pathstringopzionale

Un URL https pubblico. SpacePost lo scarica quando l'email viene inviata. Usa questo oppure content.

content_typestringopzionale

Tipo MIME, ad esempio application/pdf. Alias contentType nell'SDK.

content_idstringopzionale

Rende l'allegato inline, referenziabile come cid:<content_id> nel tuo HTML. Alias contentId nell'SDK.

  • L’intero messaggio, inclusi tutti gli allegati dopo la codifica base64, deve pesare meno di 40 MB. Base64 gonfia i file di circa il 33%, quindi tieni il totale grezzo sotto i 30 MB circa.
  • Gli allegati via URL (path) devono usare https, devono risolvere a un indirizzo pubblico (le reti private vengono rifiutate), vengono scaricati con un timeout di 10 secondi e non devono fare redirect. Se il download fallisce, l’email viene contrassegnata come failed.
  • I byte degli allegati vengono rimossi dall’archivio una volta inviata l’email; nel log restano solo i metadati (nome, tipo, dimensione).
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" }]
}

Imposta un content_id e referenzialo con un URL cid: nel tuo HTML.

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" }],
});

Le immagini inline vengono inviate come parte del messaggio e si visualizzano senza una richiesta di rete, ma molti client (Gmail sul web in particolare) le mostrano meglio quando sono piccole. Per le immagini grandi, ospitale sulla tua CDN e usa un normale URL https://.