Modul ini adalah bagian dari API email lawas (Compat32). Dalam encoding dan decoding API saat ini header ditangani secara transparan oleh API kelas yang mirip kamus. Selain digunakan dalam kode lawas, modul ini dapat berguna dalam aplikasi yang perlu mengontrol sepenuhnya rangkaian karakter yang digunakan saat menyandikan header
Teks yang tersisa di bagian ini adalah dokumentasi asli modul
RFC 2822 adalah standar dasar yang menjelaskan format pesan email. Itu berasal dari standar RFC 822 yang lebih tua yang mulai digunakan secara luas pada saat sebagian besar email hanya terdiri dari karakter ASCII. RFC 2822 adalah spesifikasi yang ditulis dengan asumsi email hanya berisi karakter ASCII 7-bit
Tentu saja, karena email telah digunakan di seluruh dunia, itu telah menjadi internasional, sehingga kumpulan karakter khusus bahasa sekarang dapat digunakan dalam pesan email. Standar dasar masih memerlukan pesan email untuk ditransfer hanya menggunakan karakter ASCII 7-bit, jadi banyak RFC telah ditulis yang menjelaskan cara menyandikan email yang berisi karakter non-ASCII ke dalam format yang sesuai dengan RFC 2822. RFC ini termasuk RFC 2045, RFC 2046, RFC 2047, dan RFC 2231. Paket mendukung standar ini dalam dan modulnya
Jika Anda ingin menyertakan karakter non-ASCII di header email Anda, misalnya di bidang Subjek atau Ke, Anda harus menggunakan kelas dan menetapkan bidang di objek ke instance daripada menggunakan string untuk nilai header. Impor kelas dari modul. Sebagai contoh
>>> from email.message import Message >>> from email.header import Header >>> msg = Message() >>> h = Header('p\xf6stal', 'iso-8859-1') >>> msg['Subject'] = h >>> msg.as_string() 'Subject: =?iso-8859-1?q?p=F6stal?=\n\n'
Perhatikan di sini bagaimana kami ingin bidang Subjek berisi karakter non-ASCII? . Saat instance berikutnya diratakan, bidang Subjek dikodekan dengan benar oleh RFC 2047. Pembaca email yang menyadari MIME akan menampilkan header ini menggunakan karakter ISO-8859-1 yang disematkan
Berikut deskripsi kelasnya
kelas email. tajuk. Tajuk(s=Tidak ada , rangkaian karakter=Tidak ada , maxlinelen=Tidak ada , header_name=Tidak ada , continuation_ws=' ' , kesalahan='ketat')Buat header yang sesuai dengan MIME yang dapat berisi string dalam kumpulan karakter yang berbeda
Opsional s adalah nilai tajuk awal. Jika >>> from email.header import decode_header >>> decode_header('=?iso-8859-1?q?p=F6stal?=') [(b'p\xf6stal', 'iso-8859-1')] 6 (default), nilai header awal tidak disetel. Anda nanti dapat menambahkan ke header dengan pemanggilan metode. s mungkin turunan dari atau , tetapi lihat dokumentasi untuk semantik
Charset opsional melayani dua tujuan. itu memiliki arti yang sama dengan argumen charset untuk metode ini. Itu juga menetapkan set karakter default untuk semua panggilan berikutnya yang menghilangkan argumen charset. Jika rangkaian karakter tidak disediakan di konstruktor (default), rangkaian karakter email.header3 digunakan baik sebagai rangkaian karakter awal s dan sebagai default untuk panggilan berikutnya
Panjang garis maksimum dapat ditentukan secara eksplisit melalui maxlinelen. Untuk memisahkan baris pertama ke nilai yang lebih pendek (untuk memperhitungkan tajuk bidang yang tidak termasuk dalam s, e. g. Subjek) berikan nama bidang di header_name. Maxlinelen default adalah 76, dan nilai default untuk header_name adalah >>> from email.header import decode_header >>> decode_header('=?iso-8859-1?q?p=F6stal?=') [(b'p\xf6stal', 'iso-8859-1')] 6, artinya tidak diperhitungkan untuk baris pertama dari header yang panjang dan terpisah
Kelanjutan_ws opsional harus spasi putih lipat yang sesuai dengan RFC 2822, dan biasanya berupa spasi atau karakter hard tab. Karakter ini akan diawali dengan garis lanjutan. kelanjutan_ws default ke karakter spasi tunggal
Kesalahan opsional diteruskan langsung ke metode
tambahkan(s , rangkaian karakter=Tidak ada , kesalahan='ketat')Tambahkan string s ke header MIME
Rangkaian karakter opsional, jika diberikan, harus berupa turunan (lihat ) atau nama rangkaian karakter, yang akan diubah menjadi turunan. Nilai >>> from email.header import decode_header >>> decode_header('=?iso-8859-1?q?p=F6stal?=') [(b'p\xf6stal', 'iso-8859-1')] _6 (default) berarti rangkaian karakter yang diberikan dalam konstruktor digunakan
s mungkin turunan dari atau. Jika ini adalah instance dari , maka charset adalah pengkodean dari string byte itu, dan a akan dimunculkan jika string tidak dapat didekodekan dengan set karakter tersebut
Jika s adalah instance dari , maka charset adalah petunjuk yang menentukan set karakter dari karakter dalam string
Dalam kedua kasus tersebut, saat membuat header yang sesuai dengan RFC 2822 menggunakan aturan RFC 2047, string akan dikodekan menggunakan codec keluaran dari rangkaian karakter. Jika string tidak dapat dikodekan menggunakan codec keluaran, UnicodeError akan dimunculkan
Kesalahan opsional diteruskan sebagai argumen kesalahan ke panggilan dekode jika s adalah string byte
enkode(pembagi=';, \t' , maxlinelen=Tidak ada , barissep='\n')Mengkodekan header pesan ke dalam format yang sesuai dengan RFC, mungkin membungkus garis panjang dan mengenkapsulasi bagian non-ASCII di base64 atau pengkodean yang dapat dicetak dengan kutipan
Splitchars opsional adalah string yang berisi karakter yang harus diberi bobot ekstra oleh algoritme pemisahan selama pembungkusan header normal. Ini sangat mendukung 'jeda sintaksis tingkat tinggi' RFC 2822. titik pisah yang didahului oleh splitchar lebih disukai selama pemisahan baris, dengan karakter yang lebih disukai dalam urutan kemunculannya dalam string. Spasi dan tab dapat disertakan dalam string untuk menunjukkan apakah preferensi harus diberikan kepada yang satu di atas yang lain sebagai titik pisah ketika karakter pisah lainnya tidak muncul di baris yang sedang dipisah. Splitchars tidak memengaruhi baris yang disandikan RFC 2047
maxlinelen, jika diberikan, menimpa nilai instans untuk panjang baris maksimum
linesep menentukan karakter yang digunakan untuk memisahkan baris dari header yang dilipat. Ini default ke nilai yang paling berguna untuk kode aplikasi Python (Compat326), tetapi Compat327 dapat ditentukan untuk menghasilkan header dengan pemisah garis yang sesuai dengan RFC
Berubah di versi 3. 2. Menambahkan argumen linesep.
Kelas juga menyediakan sejumlah metode untuk mendukung operator standar dan fungsi bawaan
__str__()Mengembalikan perkiraan sebagai string, menggunakan panjang garis tak terbatas. Semua bagian dikonversi ke unicode menggunakan pengkodean yang ditentukan dan digabungkan bersama dengan tepat. Setiap bagian dengan rangkaian karakter EmailMessage0 didekodekan sebagai ASCII menggunakan penangan kesalahan EmailMessage1
Berubah di versi 3. 2. Menambahkan penanganan untuk rangkaian karakter EmailMessage0.
__eq__(lainnya)Metode ini memungkinkan Anda untuk membandingkan dua contoh untuk kesetaraan
__ne__(lainnya)Metode ini memungkinkan Anda untuk membandingkan dua contoh ketidaksetaraan
Modul ini juga menyediakan fungsi praktis berikut
email. tajuk. decode_header(tajuk)Dekode nilai header pesan tanpa mengonversi rangkaian karakter. Nilai tajuk ada di tajuk
Fungsi ini mengembalikan daftar EmailMessage_6 pasangan yang berisi masing-masing bagian yang didekodekan dari header. charset adalah >>> from email.header import decode_header >>> decode_header('=?iso-8859-1?q?p=F6stal?=') [(b'p\xf6stal', 'iso-8859-1')] 6 untuk bagian header yang tidak disandikan, jika tidak, string huruf kecil berisi nama set karakter yang ditentukan dalam string yang disandikan
Ini sebuah contoh
>>> from email.header import decode_header >>> decode_header('=?iso-8859-1?q?p=F6stal?=') [(b'p\xf6stal', 'iso-8859-1')] _
email. tajuk. make_header(decoded_seq , maxlinelen=Tidak ada , header_name=Tidak ada , continuation_ws=' ')Buat instance dari urutan pasangan seperti yang dikembalikan oleh
mengambil string nilai header dan mengembalikan urutan pasangan format EmailMessage6 di mana charset adalah nama set karakter
Fungsi ini mengambil salah satu urutan pasangan tersebut dan mengembalikan sebuah instance. Maxlinelen opsional, nama_tajuk, dan kelanjutan_ws seperti pada konstruktor