Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengirim email mentah menggunakan Amazon SES API
Anda dapat menggunakan operasi SendRawEmail
Amazon SES untuk mengirim pesan yang sangat disesuaikan ke penerima Anda.
Bagian ini mencakup prosedur untuk menyusun dan mengirim email mentah menggunakan API Amazon SES.
Tentang bidang header email
Protokol Transfer Surat Sederhana (SMTP) menentukan bagaimana pesan email akan dikirim dengan menentukan envelope surat dan beberapa parameternya, tetapi tidak peduli dengan isi pesannya. Sebaliknya, Format Pesan Internet (RFC 5322
Dengan spesifikasi Format Pesan Internet, setiap pesan email terdiri dari header dan badan. Header terdiri dari metadata pesan, dan badan berisi pesan itu sendiri. Untuk informasi selengkapnya tentang header dan badan email, lihat Format email dan Amazon SES.
Menggunakan MIME
Protokol SMTP awalnya dirancang untuk mengirim pesan email yang hanya berisi karakter 7-bit ASCII. Spesifikasi ini membuat SMTP tidak cukup untuk pengodean teks non-ASCII (seperti Unicode), konten biner, atau lampiran. Standar Multipurpose Internet Mail Extensions (MIME) dikembangkan untuk memungkinkan mengirim banyak tipe konten lain menggunakan SMTP.
Standar MIME bekerja dengan memecah badan pesan menjadi beberapa bagian dan kemudian menentukan apa yang harus dilakukan untuk setiap bagian. Misalnya, salah satu bagian dari badan pesan email mungkin berupa teks biasa, sementara yang lain mungkin HTML. Selain itu, MIME mengizinkan pesan email untuk berisi satu lampiran atau lebih. Penerima pesan dapat melihat lampiran dari dalam klien email mereka, atau mereka dapat menyimpan lampiran.
Header dan konten pesan dipisahkan oleh baris kosong. Setiap bagian dari email dipisahkan oleh batas, string karakter yang menunjukkan awal dan akhir dari setiap bagian.
Pesan multipart dalam contoh berikut berisi teks dan bagian HTML, dan lampiran. Lampiran harus ditempatkan tepat di bawah header lampiran dan paling sering dikodekan base64
seperti yang ditunjukkan dalam contoh ini.
From: "Sender Name" <sender@example.com> To: recipient@example.com Subject: Customer service contact info Content-Type: multipart/mixed; boundary="a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a" --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a Content-Type: multipart/alternative; boundary="sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a" --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Please see the attached file for a list of customers to contact. --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable <html> <head></head> <body> <h1>Hello!</h1> <p>Please see the attached file for a list of customers to contact.</p> </body> </html> --sub_a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a-- --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a Content-Type: text/plain; name="customers.txt" Content-Description: customers.txt Content-Disposition: attachment;filename="customers.txt"; creation-date="Sat, 05 Aug 2017 19:35:36 GMT"; Content-Transfer-Encoding: base64 SUQsRmlyc3ROYW1lLExhc3ROYW1lLENvdW50cnkKMzQ4LEpvaG4sU3RpbGVzLENhbmFkYQo5MjM4 OSxKaWUsTGl1LENoaW5hCjczNCxTaGlybGV5LFJvZHJpZ3VleixVbml0ZWQgU3RhdGVzCjI4OTMs QW5heWEsSXllbmdhcixJbmRpYQ== --a3f166a86b56ff6c37755292d690675717ea3cd9de81228ec2b76ed4a15d6d1a--
Tipe konten untuk pesan adalah multipart/mixed
, menunjukkan bahwa pesan memiliki banyak bagian (di contoh ini, badan dan lampiran), dan klien penerima harus menangani setiap bagian secara terpisah.
Nest yang dilakukan dalam bagian badan adalah bagian kedua yang menggunakan tipe konten multipart/alternative
. Tipe konten ini menunjukkan bahwa setiap bagian berisi versi alternatif dari konten yang sama (di kasus ini, versi teks dan versi HTML). Jika klien email penerima dapat menampilkan konten HTML, maka versi HTML badan pesan akan ditunjukkan. Jika klien email penerima dapat tidak menampilkan konten HTML, maka versi teks biasa badan pesan akan ditunjukkan.
Kedua versi pesan juga berisi lampiran (di kasus ini, file teks pendek yang berisi beberapa nama pelanggan).
Ketika Anda melakukan nest pada bagian MIME dalam bagian lain, seperti di contoh ini, bagian yang di-nest harus menggunakan parameter boundary
yang berbeda dengan parameter boundary
di bagian induk. Batas-batas ini harus berupa string unik karakter. Untuk menentukan batas antara bagian MIME, ketik dua tanda hubung (--) diikuti oleh string batas. Di akhir bagian MIME, tempatkan dua tanda hubung di bagian awal dan akhir string batas.
Pengkodean MIME
Untuk menjaga kompatibilitas dengan sistem yang lebih lama, Amazon SES menerima pembatasan 7-bit ASCII SMTP sebagaimana ditentukan di RFC 2821
Alamat email
String alamat email harus 7-bit ASCII. Jika Anda ingin mengirim ke atau dari alamat email yang berisi karakter Unicode di bagian domain alamat, Anda harus mengodekan domain menggunakan Punycode. Punycode tidak diizinkan di bagian lokal dari alamat email (bagian sebelum tanda @) atau dalam nama "friendly from". Jika Anda ingin menggunakan karakter Unicode dalam nama "friendly from", Anda harus mengodekan nama "friendly from" menggunakan sintaksis kata yang dikodekan MIME, seperti yang dijelaskan dalam Mengirim email mentah menggunakan Amazon SES API. Untuk informasi selengkapnya tentang Punycode, lihat RFC 3492
catatan
Aturan ini hanya berlaku untuk alamat email yang Anda tentukan di envelope pesan, bukan header pesan. Saat Anda menggunakan API SendRawEmail
, alamat yang Anda tentukan di parameter Source
dan Destinations
menentukan pengirim dan penerima envelope, masing-masing.
Header email
Untuk mengodekan header pesan, gunakan sintaksis MIME encoded-word. Sintaksis kata dikodekan MIME menggunakan format berikut:
=?
charset
?encoding
?encoded-text
?=
Nilai
dapat berupa encoding
Q
atau B
. Jika nilai pengodean adalah Q
, maka nilai
harus menggunakan Q-encoding. Jika nilai pengodean adalah encoded-text
B
, maka nilai
harus menggunakan pengodean base64.encoded-text
Misalnya, jika Anda ingin menggunakan string "Як ти поживаєш?" di baris subjek email, Anda dapat menggunakan salah satu pengodean berikut:
-
Pengkodean Q
=?utf-8?Q?=D0=AF=D0=BA_=D1=82=D0=B8_=D0=BF=D0=BE=D0=B6=D0=B8=D0=B2=D0=B0=D1=94=D1=88=3F?=
-
Pengkodean Base64
=?utf-8?B?0K/QuiDRgtC4INC/0L7QttC40LLQsNGU0Yg/?=
Untuk informasi selengkapnya tentang Q-encoding, lihat RFC 2047
Badan pesan
Untuk mengodekan badan pesan, Anda dapat menggunakan pengodean quoted-printable atau pengodean base64. Kemudian, gunakan header Content-Transfer-Encoding
untuk menunjukkan skema pengodean yang Anda gunakan.
Sebagai contoh, asumsikan badan pesan Anda berisi teks berikut:
१९७२ मे रे टॉमलिंसन ने पहला ई-मेल संदेश भेजा | रे टॉमलिंसन ने ही सर्वप्रथम @ चिन्ह का चयन किया और इन्ही को ईमेल का आविष्कारक माना जाता है
Jika Anda memilih untuk mengodekan teks ini menggunakan pengodean base64, pertama tentukan header berikut:
Content-Transfer-Encoding: base64
Kemudian, di bagian badan email, sertakan teks yang dikodekan base64:
4KWn4KWv4KWt4KWoIOCkruClhyDgpLDgpYcg4KSf4KWJ4KSu4KSy4KS/4KSC4KS44KSoIOCkqOCl hyDgpKrgpLngpLLgpL4g4KSILeCkruClh+CksiDgpLjgpILgpKbgpYfgpLYg4KSt4KWH4KSc4KS+ IHwg4KSw4KWHIOCkn+ClieCkruCksuCkv+CkguCkuOCkqCDgpKjgpYcg4KS54KWAIOCkuOCksOCl jeCkteCkquCljeCksOCkpeCkriBAIOCkmuCkv+CkqOCljeCkuSDgpJXgpL4g4KSa4KSv4KSoIOCk leCkv+Ckr+CkviDgpJTgpLAg4KSH4KSo4KWN4KS54KWAIOCkleCliyDgpIjgpK7gpYfgpLIg4KSV 4KS+IOCkhuCkteCkv+Ckt+CljeCkleCkvuCksOCklSDgpK7gpL7gpKjgpL4g4KSc4KS+4KSk4KS+ IOCkueCliAo=
catatan
Di beberapa kasus, Anda dapat menggunakan Content-Transfer-Encoding
8bit di pesan yang Anda kirim menggunakan Amazon SES. Namun, jika Amazon SES harus membuat perubahan pada pesan Anda (misalnya, ketika Anda menggunakan pelacakan buka dan klik), konten yang 8-bit-encoded mungkin tidak muncul dengan benar saat diterima di kotak masuk penerima. Untuk alasan ini, Anda harus selalu mengodekan konten yang bukan ASCII 7-bit.
Lampiran file
Untuk melampirkan file ke email, Anda harus mengodekan lampiran menggunakan pengodean base64. Lampiran biasanya ditempatkan di bagian pesan MIME khusus, yang mencakup header berikut:
-
Content-Type - Jenis file lampiran. Berikut ini adalah contoh deklarasi Tipe Konten MIME umum:
-
File teks biasa -
Content-Type: text/plain; name="sample.txt"
-
Dokumen Microsoft Word —
Content-Type: application/msword; name="document.docx"
-
Gambar JPG -
Content-Type: image/jpeg; name="photo.jpeg"
-
-
Content-Disposition - Menentukan bagaimana klien email penerima harus menangani konten. Untuk lampiran, nilai ini adalah
Content-Disposition: attachment
. -
Content-Transfer-Encoding - Skema yang digunakan untuk menyandikan lampiran. Untuk lampiran file, nilai ini hampir selalu
base64
. -
Lampiran yang dikodekan - Anda harus menyandikan lampiran yang sebenarnya dan memasukkannya ke dalam badan di bawah header lampiran seperti yang ditunjukkan pada contoh.
Amazon SES menerima tipe file yang paling umum. Untuk daftar tipe file yang tidak diterima Amazon SES, lihat Tipe lampiran yang tidak didukung Amazon SES.
Mengirim email mentah menggunakan API Amazon SES
API Amazon SES menyediakan tindakan SendRawEmail
, yang memungkinkan Anda menulis dan mengirim pesan email dalam format yang Anda tentukan. Untuk deskripsi lengkap tentang SendRawEmail
, lihat Referensi API Amazon Simple Email Service.
catatan
Untuk tips tentang cara meningkatkan kecepatan pengiriman email ketika Anda melakukan beberapa panggilan ke SendRawEmail
, lihat Meningkatkan throughput dengan Amazon SES.
Badan pesan harus berisi pesan yang diformat dengan benar dan email mentah, dengan bidang header dan pengodean badan pesan yang sesuai. Meskipun pesan mentah mungkin dapat disusun secara manual dalam aplikasi, tapi akan jauh lebih mudah untuk melakukannya dengan menggunakan pustaka surat yang ada.