Sign inGet started

Lampiran

Lampirkan file ke pengiriman dengan menambahkan array attachments ke payload POST /v1/email/messages. Setiap entri berisi byte file yang di-base64-encode di content, beserta filename. Array yang sama berlaku pada item batch. Skema request dan response lengkap ada di referensi API.

Pengiriman dengan satu lampiran

await bird.email.send({
  from: "hello@yourdomain.com",
  to: ["delivered@messagebird.dev"],
  subject: "Your invoice",
  html: "<p>Thanks for your order. Your invoice is attached.</p>",
  attachments: [
    {
      filename: "invoice.pdf",
      content: "JVBERi0xLjcKJ...",
      content_type: "application/pdf",
    },
  ],
});
CLI membaca file dan melakukan base64-encode untuk Anda; melalui API Anda menyediakan byte yang sudah di-encode sendiri. SDK Go menerima byte mentah dan melakukan encode saat pengiriman.
content adalah byte file mentah yang di-base64-encode. content_type bersifat opsional: jika Anda mengosongkannya, kami menyimpulkan MIME type dari ekstensi filename, dan menggunakan application/octet-stream jika ekstensinya tidak dikenali. Semua hal lain tentang pengiriman bekerja persis seperti pada mengirim email: 202, model async, tag, dan metadata tidak berubah dengan adanya lampiran.

Field lampiran

FieldTipeWajibCatatan
filenamestringya1 sampai 255 karakter; ditampilkan kepada penerima. Tidak boleh ada line break atau karakter kontrol.
contentstringyaByte file yang di-encode Base64.
content_typestringtidakMIME type; disimpulkan dari ekstensi nama file jika tidak diisi.
content_idstringtidak1 sampai 128 karakter, [A-Za-z0-9._-]. Isi untuk merender file secara inline, bukan sebagai lampiran.
Sebuah email dapat memiliki maksimal 20 lampiran (attachments dibatasi 20 item).

Gambar inline

Untuk menyematkan gambar di body HTML alih-alih melampirkannya, berikan lampiran tersebut content_id dan referensikan dari markup dengan URL cid::
Contoh kode
{
  "html": "<p>Welcome aboard!</p><img src=\"cid:welcome-banner\"/>",
  "attachments": [
    {
      "filename": "banner.png",
      "content": "iVBORw0KGgoAAAANS...",
      "content_type": "image/png",
      "content_id": "welcome-banner"
    }
  ]
}
content_id adalah penghubung antara referensi cid: dan lampiran. Setiap gambar inline memerlukan content_id yang unik dalam satu pengiriman; duplikat akan ditolak dengan 422. Lampiran tanpa content_id dikirim sebagai lampiran file biasa.

Batas ukuran

Kami menolak pengiriman yang estimasi ukuran pesan yang dihasilkan melebihi 20 MB dengan 413. Estimasi dihitung dari body HTML ditambah body teks ditambah setiap lampiran yang diukur setelah base64 encoding. Encoding memperbesar byte mentah sekitar 4/3, sehingga file 15 MB saja sudah menghabiskan seluruh batas 20 MB. Sebagai panduan, jaga total konten lampiran mentah jauh di bawah 15 MB agar body dan pembungkus MIME masih muat.
Server penerima dapat menerapkan batas ukuran yang lebih rendah. Pesan yang diterima Bird tetap bisa bounce jika server penerima menolak ukurannya. Sesuaikan ukuran lampiran dengan penyedia kotak masuk dan organisasi tujuan pengiriman Anda.
Untuk pesan yang diterima, lihat Ukuran pesan masuk.

Tipe file yang diblokir

Lampiran executable dan script ditolak saat validasi dengan 422, berdasarkan content_type atau ekstensi nama file. Ekstensi yang diblokir meliputi .exe, .dll, .msi, .bat, .cmd, .scr, .jar, .js, .vbs, .ps1, .sh, .hta, dan .lnk. MIME type yang setara seperti application/x-msdownload, application/java-archive, dan text/javascript juga diblokir. Validasi ini bukan pemindai virus. Untuk mendistribusikan file yang diblokir, hosting file tersebut di balik sebuah tautan.

Dalam batch

Setiap item dalam pengiriman batch dapat memiliki attachments sendiri, dengan kontrak field yang sama dan batas 20 MB per pesan yang sama. Body request batch yang diserialisasi memiliki batas tersendiri di atasnya, yang cepat terpakai oleh lampiran base64-encoded; lihat pengiriman batch untuk batas level batch dan cara membaginya.

Membaca dan mengunduh lampiran

Pembacaan API tidak pernah mengembalikan byte lampiran. GET /v1/email/messages/{message_id} mengembalikan array attachments berisi metadata saja; setiap entri memiliki id, filename, content_type, size (byte yang di-decode), dan inline lampiran:
Contoh kode
{
  "attachments": [
    {
      "id": "ea_019c...",
      "filename": "invoice.pdf",
      "content_type": "application/pdf",
      "size": 215432,
      "inline": false
    }
  ]
}
Untuk mendapatkan byte mentah kembali, panggil GET /v1/email/messages/{message_id}/attachments/{attachment_id} (referensi). Endpoint ini men-stream file dengan content type-nya sendiri dan header Content-Disposition yang berisi nama file. Dua syarat yang harus dipenuhi:
  • Penyimpanan konten harus diaktifkan untuk workspace. Jika penyimpanan dinonaktifkan, tidak ada yang disimpan untuk diunduh. Lihat arti respons 202.
  • Lampiran disimpan selama 30 hari setelah pengiriman. Setelah itu, unduhan mengembalikan 410 Gone.
404 berarti pesan tidak memiliki konten tersimpan atau tidak ada lampiran dengan ID tersebut; 425 Too Early berarti lampiran masih dalam proses penyimpanan dan permintaan dapat dicoba lagi sebentar kemudian.

Langkah selanjutnya