添付ファイル
attachments は、最大 50 個のオブジェクトからなる配列です。各添付ファイルには filename と、content または path のどちらか一方だけが必要です。
filenamestring必須1 〜 255 文字。受信者に表示されます。
contentstring任意base64 のファイルバイト列。SDK は Buffer/Uint8Array も受け付け、自動でエンコードします。path とどちらか一方を使います。
pathstring任意公開された https の URL。メールの送信時に SpacePost がダウンロードします。content とどちらか一方を使います。
content_typestring任意application/pdf などの MIME タイプ。SDK での別名は contentType です。
content_idstring任意添付ファイルをインライン化し、HTML 内で cid:<content_id> として参照できるようにします。SDK での別名は contentId です。
- 添付ファイルを base64 エンコードしたあとの全体を含め、メッセージ全体が 40 MB 未満である必要があります。base64 でファイルは約 33% 大きくなるため、元のサイズの合計は約 30 MB 以下に抑えてください。
- URL 添付(
path)はhttpsである必要があり、公開アドレスに解決されなければなりません(プライベートネットワークは拒否されます)。取得のタイムアウトは 10 秒で、リダイレクトしてはいけません。取得に失敗すると、メールはfailedになります。 - 添付ファイルのバイト列は、メールの送信後にストレージから削除されます。ログにはメタデータ(名前、タイプ、サイズ)だけが残ります。
内容を指定してファイルを添付する
Section titled “内容を指定してファイルを添付する”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);curl -X POST https://api.spacepost.dev/emails \ -H "Authorization: Bearer $SPACEPOST_API_KEY" -H "Content-Type: application/json" \ -d "{ \"from\": \"Acme <billing@acme.com>\", \"to\": [\"user@example.com\"], \"subject\": \"Invoice 1042\", \"text\": \"Your invoice is attached.\", \"attachments\": [{ \"filename\": \"invoice-1042.pdf\", \"content_type\": \"application/pdf\", \"content\": \"$(base64 -w0 invoice-1042.pdf)\" }] }"macOS では base64 -i invoice-1042.pdf を使ってください(-w0 は不要です)。
import base64
with open("invoice-1042.pdf", "rb") as f: content = base64.b64encode(f.read()).decode()
requests.post( "https://api.spacepost.dev/emails", headers={"Authorization": f"Bearer {os.environ['SPACEPOST_API_KEY']}"}, json={ "from": "Acme <billing@acme.com>", "to": ["user@example.com"], "subject": "Invoice 1042", "text": "Your invoice is attached.", "attachments": [{"filename": "invoice-1042.pdf", "content_type": "application/pdf", "content": content}], },)URL を指定してファイルを添付する
Section titled “URL を指定してファイルを添付する”{ "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" }]}インライン画像
Section titled “インライン画像”content_id を設定し、HTML 内で cid: URL で参照します。
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" }],});インライン画像はメッセージの一部として送信され、ネットワークリクエストなしで表示されます。ただし、多くのメールクライアント(特にウェブ版の Gmail)では、サイズが小さいほどきれいに表示されます。大きな画像は自分の CDN に置いて、通常の https:// URL を使ってください。