Saat mengirim konten email, diperlukan untuk menyetel header "Pengkodean Transfer Konten". Saya mengamati banyak header email yang saya terima. Beberapa email menggunakan "7bit" dan beberapa menggunakan "8bit".
Apa perbedaan antara keduanya? Mana yang direkomendasikan? Apakah ada pengkodean khusus yang diperlukan untuk badan email untuk menyetel header ini?
Jawaban:
Ini bisa agak padat untuk dibaca, tetapi bagian "Pengkodean-Transfer-Konten" dari RFC 1341 memiliki semua detail:
http://www.w3.org/Protocols/rfc1341/5_Content-Transfer-Encoding.html
Situasinya berubah dari buruk menjadi lebih buruk. Inilah ringkasan saya:
Latar Belakang
SMTP, menurut definisi (RFC 821), membatasi mail ke baris 1000 karakter masing-masing 7 bit. Itu berarti bahwa tidak ada byte yang Anda kirimkan ke pipa dapat memiliki bit paling signifikan ("urutan tertinggi") yang disetel ke "1".
Konten yang ingin kami kirim seringkali tidak mematuhi batasan ini secara inheren. Pikirkan file gambar, atau file teks yang berisi karakter Unicode: byte dari file-file ini sering kali memiliki bit ke-8 yang disetel ke "1". SMTP tidak mengizinkan ini, jadi Anda perlu menggunakan "transfer encoding" untuk menjelaskan bagaimana Anda mengatasi ketidakcocokan tersebut.
Nilai untuk
Content-Transfer-Encoding
tajuk menjelaskan aturan yang Anda pilih untuk menyelesaikan masalah ini.7Bit Encoding
7bit
berarti "Data saya hanya terdiri dari karakter US-ASCII, yang hanya menggunakan 7 bit lebih rendah untuk setiap karakter." Anda pada dasarnya menjamin bahwa semua byte dalam konten Anda sudah mematuhi batasan SMTP, sehingga tidak memerlukan perlakuan khusus. Anda bisa membacanya apa adanya.Perhatikan bahwa ketika Anda memilih
7bit
, Anda setuju bahwa semua baris dalam konten Anda kurang dari 1000 karakter.Selama konten Anda mematuhi aturan ini, itu
7bit
adalah pengkodean transfer terbaik, karena tidak ada pekerjaan tambahan yang diperlukan; Anda hanya membaca / menulis byte saat mereka keluar dari pipa. Ini juga mudah untuk melihat7bit
konten dan memahaminya. Idenya di sini adalah bahwa jika Anda hanya menulis dalam "teks bahasa Inggris biasa" Anda akan baik-baik saja. Tapi itu tidak benar di tahun 2005 dan tidak benar hari ini.8Bit Encoding
8bit
berarti "Data saya mungkin menyertakan karakter ASCII yang diperpanjang; mereka dapat menggunakan bit ke-8 (tertinggi) untuk menunjukkan karakter khusus di luar karakter standar 7-bit US-ASCII." Adapun7bit
, masih ada batas baris 1000 karakter.8bit
, sama seperti7bit
, tidak benar-benar melakukan transformasi byte saat ditulis atau dibaca dari kabel. Ini hanya berarti bahwa Anda tidak menjamin bahwa tidak ada byte yang memiliki bit tertinggi yang disetel ke "1".Ini sepertinya merupakan langkah maju
7bit
, karena memberi Anda lebih banyak kebebasan dalam konten Anda. Namun, RFC 1341 berisi berita gembira ini:RFC 1341 keluar lebih dari 20 tahun yang lalu. Sejak itu kami mendapatkan Ekstensi MIME 8bit di RFC 6152 . Namun demikian, batas garis masih mungkin berlaku:
Pengkodean Biner
binary
sama dengan8bit
, hanya saja tidak ada batasan panjang garis. Anda tetap dapat memasukkan karakter apa pun yang Anda inginkan, dan tidak ada pengkodean tambahan. Mirip dengan8bit
, RFC 1341 menyatakan bahwa ini bukan pengkodean transfer pengkodean yang sah. RFC 3030 memperpanjang ini denganBINARYMIME
.Dikutip Printable
Sebelum
8BITMIME
ekstensi, harus ada cara untuk mengirim konten yang tidak bisa7bit
melalui SMTP. File HTML (yang mungkin memiliki lebih dari 1000 baris karakter) dan file dengan karakter internasional adalah contoh yang bagus untuk ini. Thequoted-printable
encoding (Ditetapkan di Bagian 5.1 dari RFC 1341) dirancang untuk menangani hal ini. Itu melakukan dua hal:Dikutip Printable, karena garis pendek dan pelariannya, jauh lebih sulit dibaca oleh manusia daripada
7bit
atau8bit
, tetapi mendukung lebih banyak kemungkinan konten.Pengkodean Base64
Jika sebagian besar data Anda bukan teks (mis .: file gambar), Anda tidak memiliki banyak opsi.
7bit
dari meja.8bit
danbinary
tidak didukung sebelum RFC ekstensi MIME.quoted-printable
akan berfungsi, tetapi sangat tidak efisien (setiap byte akan diwakili oleh 3 karakter).base64
adalah solusi yang bagus untuk jenis data ini. Ini mengkodekan 3 byte mentah sebagai 4 karakter US-ASCII, yang relatif efisien. RFC 1341 selanjutnya membatasi panjang barisbase64
data yang dienkode menjadi 76 karakter agar sesuai dengan pesan SMTP, tetapi itu relatif mudah dikelola saat Anda hanya memisahkan atau menggabungkan karakter arbitrer pada panjang tetap.Kelemahan besar adalah bahwa
base64
data yang disandikan hampir seluruhnya tidak dapat dibaca oleh manusia, bahkan jika itu hanya teks "biasa" di bawahnya.sumber