コンテンツにスキップ

添付ファイル

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 “内容を指定してファイルを添付する”
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);

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" }]
}

content_id を設定し、HTML 内で 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" }],
});

インライン画像はメッセージの一部として送信され、ネットワークリクエストなしで表示されます。ただし、多くのメールクライアント(特にウェブ版の Gmail)では、サイズが小さいほどきれいに表示されます。大きな画像は自分の CDN に置いて、通常の https:// URL を使ってください。