Saya perlu untuk tujuan pengujian untuk mengisi beberapa ratus kotak email dengan berbagai pesan, dan akan menggunakan smtplib untuk itu. Tetapi di antara hal-hal lain saya harus dapat mengirim pesan tidak hanya KE kotak surat tertentu, tetapi juga CC dan BCC. Sepertinya smtplib tidak mendukung CC-ing dan BCC-ing saat mengirim email.
Mencari saran bagaimana melakukan CC atau BCC mengirim pesan dari script python.
(Dan - tidak, saya tidak membuat skrip untuk mengirim spam kepada siapa pun di luar lingkungan pengujian saya.)
Kuncinya adalah menambahkan penerima sebagai daftar id email di panggilan sendmail Anda.
sumber
msg['BCC']
off - ini mengungkapkan pengirim tersembunyi Anda dan tidak berdampak pada apakah pesan tersebut dikirim kepada mereka atau tidak (argumen untuksendmail
melakukan itu).Jangan tambahkan header bcc.
Lihat ini: http://mail.python.org/pipermail/email-sig/2004-September/000151.html
Dan ini: "" "Perhatikan bahwa argumen kedua untuk sendmail (), penerima, diteruskan sebagai daftar. Anda dapat menyertakan sejumlah alamat dalam daftar agar pesan dikirimkan ke masing-masing secara bergiliran. Sejak amplop Informasi terpisah dari header pesan, Anda bahkan dapat BCC seseorang dengan memasukkan mereka dalam argumen metode tetapi tidak di header pesan. "" "dari http://pymotw.com/2/smtplib
sumber
Sejak Python 3.2, dirilis November 2011, smtplib memiliki fungsi baru,
send_message
bukan hanyasendmail
, yang membuat berurusan dengan To / CC / BCC lebih mudah. Menarik dari contoh email resmi Python , dengan sedikit modifikasi, kami mendapatkan:Menggunakan header berfungsi dengan baik, karena send_message menghormati BCC seperti yang diuraikan dalam dokumentasi :
Dengan
sendmail
menambahkan header CC ke pesan, melakukan sesuatu seperti:Atau
Masalahnya adalah, fungsi sendmail memperlakukan semua header tersebut dengan sama, artinya mereka akan dikirim (terlihat) ke semua To: dan BCC: users, mengalahkan tujuan BCC. Solusinya, seperti yang ditunjukkan dalam banyak jawaban lain di sini, adalah tidak menyertakan BCC di tajuk, dan sebagai gantinya hanya dalam daftar email yang diteruskan
sendmail
.Peringatannya adalah itu
send_message
membutuhkan objek Message, yang berarti Anda harus mengimpor kelas dariemail.message
alih-alih hanya meneruskan string ke dalamnyasendmail
.sumber
Perbedaan antara TO, CC, dan BCC hanya terjadi di header teks. Di tingkat SMTP, setiap orang adalah penerima.
TO - Ada header TO: dengan alamat penerima ini
CC - Ada header CC: dengan alamat penerima ini
BCC - Penerima ini sama sekali tidak disebutkan di tajuk, tetapi masih menjadi penerima.
Jika Anda memiliki
Anda memiliki tiga penerima. Header di badan email hanya akan menyertakan KEPADA: dan CC:
sumber
Anda dapat mencoba MIMEText
lalu kirim msg.as_string ()
https://docs.python.org/3.6/library/email.examples.html
sumber
Itu tidak berhasil untuk saya sampai saya membuat:
dan dari menambahkan cc di penerima [daftar] seperti:
sumber
Tak satu pun dari hal-hal di atas berhasil untuk saya karena saya memiliki banyak penerima baik di 'to' dan 'cc'. Jadi saya coba seperti di bawah ini:
dan kembangkan 'penerima' dengan 'cc_recipients' dan kirim email dengan cara yang sepele
sumber