Pular para o conteúdo

Anexos

attachments é um array com até 50 objetos. Cada anexo precisa de um filename e de exatamente um entre content e path.

filenamestringobrigatório

De 1 a 255 caracteres. Exibido ao destinatário.

contentstringopcional

Bytes do arquivo em base64. O SDK também aceita um Buffer/Uint8Array e o codifica para você. Use este campo ou path.

pathstringopcional

Uma URL https pública. O SpacePost a baixa quando o e-mail é enviado. Use este campo ou content.

content_typestringopcional

Tipo MIME, como application/pdf. Alias contentType no SDK.

content_idstringopcional

Torna o anexo inline, referenciável como cid:<content_id> no seu HTML. Alias contentId no SDK.

  • A mensagem inteira, incluindo todos os anexos após a codificação em base64, deve ter menos de 40 MB. O base64 aumenta os arquivos em cerca de 33%, então mantenha o total bruto abaixo de aproximadamente 30 MB.
  • Os anexos por URL (path) devem usar https, devem resolver para um endereço público (redes privadas são recusadas), são buscados com um timeout de 10 segundos e não podem redirecionar. Falhas na busca marcam o e-mail como failed.
  • Os bytes dos anexos são removidos do armazenamento assim que o e-mail é enviado; apenas os metadados (nome, tipo, tamanho) permanecem no log.
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" }]
}

Defina um content_id e referencie-o com uma URL cid: no seu 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" }],
});

As imagens inline são enviadas como parte da mensagem e aparecem sem uma requisição de rede, mas muitos clientes (o Gmail na web, em particular) as exibem melhor quando são pequenas. Para imagens grandes, hospede-as na sua própria CDN e use uma URL https:// normal.