Python

Menghantar E-mel di Python

Menghantar E-mel di Python
Menghantar E-mel adalah salah satu tugas yang paling biasa yang perlu saya lakukan dalam aplikasi web dan projek lain yang saya buat. Dengan Python, ini adalah perkara yang mudah dan senang dilakukan. Walaupun kita perlu menggunakan beberapa templat yang telah ditentukan, Python membantu kita untuk mengganti nilai placeholder dengan data sebenar sehingga e-mel akhir kelihatan elegan dan penuh dengan perincian yang membuat pelanggan saya senang.

Dalam pelajaran ini, saya akan berkongsi skrip yang saya gunakan untuk menghantar e-mel kepada pengguna aplikasi yang saya buat dan banyak lagi.

Apa yang akan kita lakukan?

Kami akan membuat program Python sederhana yang akan melakukan perkara berikut:

Titik-titik ini menjadikan program ini lebih dekat dengan penggunaan sebenar menghantar e-mel dalam aplikasi anda. Mari kita mulakan.

Fail untuk e-mel

Fail yang mengandungi e-mel untuk pengguna akan kelihatan seperti ini:

Shubham shubham.kod @ gmail.com

Ini hanyalah fail teks ringkas yang mengandungi nama pengguna dan e-mel yang dipisahkan dengan ruang. Beberapa e-mel telah dimasukkan dengan data setiap pengguna dalam baris baru. Kami menamakan fail ini pengguna.txt.

Menggunakan Templat

Mari kita cepat menentukan templat juga yang akan kita gunakan dalam skrip kita untuk menggantikan nilai:

Helo $ PERSON_NAME,
Kami menghantar e-mel ini menggunakan modul Python smtplib. Sejuk, betul?
Semoga hari yang cerah di hadapan!
Sorakan

Kami telah menggunakan rentetan templat $ PERSON_NAME yang akan diganti dengan nama orang yang kita dapat dari pengguna.fail txt semasa menghantar e-mel.

Mendapatkan data pengguna dari fail

Langkah pertama untuk menghantar e-mel kepada pengguna adalah mengenal pasti di mana kita mahu menghantar e-mel. Mari tulis fungsi Python yang akan menerima nama fail dan mengembalikan nama pengguna dan ID e-mel di mana e-mel perlu dihantar:

def get_users_data (nama_fail):
nama_pengguna = []
pengguna_email = []
dengan terbuka (nama_file, mod = 'r', pengekodan = 'utf-8') sebagai user_file:
untuk user_info dalam user_file:
nama_pengguna.tambahkan (user_info.berpisah () [0])
pengguna_email.tambahkan (user_info.berpecah () [1])
kembalikan nama pengguna, alamat pengguna

Dengan fungsi ini, kami hanya mengembalikan nama pengguna dan e-mel yang kami peroleh dari bentuk fail.

Mendapatkan Objek Templat

Sekarang, kita dapat menghuraikan templat kita dan mendapatkan objek templat dari fail teks yang kita buat:

def read_template (nama_fail):
dengan terbuka (nama_file, 'r', pengekodan = 'utf-8') sebagai msg_template:
msg_template_content = msg_template.baca ()
kembali Templat (msg_template_content)

Dengan ini, kita akan mendapatkan kembali objek Templat yang dapat kita gunakan untuk menguraikan kandungan fail dan membuat penggantian yang diperlukan untuk rentetan templat seperti nama pengguna.

Cara penghantaran e-mel dilakukan?

Sekarang kita sudah bersedia dengan reka bentuk templat dan data pengguna, kita perlu memahami bagaimana e-mel sebenarnya dihantar kepada pengguna:

Menyiapkan sambungan SMTP

Mari kita akhirnya menentukan fungsi yang akan menghantar e-mel kepada pengguna yang ditentukan. Inilah fungsinya:

def utama ():
user_name, user_email = get_users_data ('pengguna.txt ') # baca butiran pengguna
message_template = read_template ('mesej.txt ')
# sediakan pelayan SMTP
smtplib_server = smtplib.SMTP (hos = 'smtp.gmail.com ', port = 587)
smtplib_server.permulaan ()
smtplib_server.log masuk (SEND_FROM, EMAIL_PWD)
# Dapatkan setiap maklumat pengguna dan hantarkan e-mel:
untuk nama, e-mel dalam zip (nama_pengguna, alamat_ pengguna):
multipart_message = MIMEMultipart () # buat mesej
# tambahkan nama orang sebenar ke templat mesej
msg = message_template.pengganti (PERSON_NAME = nama.tajuk ())
# Mencetak badan mesej untuk kepentingan kita
cetak (msg)
# tetapkan parameter mesej
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mel
multipart_message ['Subject'] = "E-mel LinuxHint"
# tambah dalam badan mesej
pesanan berbilang bahagian.lampirkan (MIMEText (msg, 'plain'))
# hantar mesej melalui pelayan yang disiapkan lebih awal.
smtplib_server.hantar_mesej (multipart_message)
del multipart_message
# Tamatkan sesi SMTP dan tutup sambungan
smtplib_server.berhenti ()

Dalam fungsi di atas, kami mengikuti setiap langkah yang kami nyatakan di bahagian sebelumnya. Kami membina sambungan SMTP dan menggunakannya untuk menghantar e-mel.

Program yang lengkap

Pada bahagian terakhir, mari kita lihat program lengkap yang boleh digunakan untuk menghantar e-mel kepada pengguna yang ditentukan:

import smtplib
dari templat import rentetan
dari e-mel.mime.multipart import MIMEMultipart
dari e-mel.mime.teks MIMETeksport
SEND_FROM = 'my-email-here'
EMAIL_PWD = 'kata laluan saya-di sini'
def get_users_data (nama_fail):
nama_pengguna = []
pengguna_email = []
dengan terbuka (nama_file, mod = 'r', pengekodan = 'utf-8') sebagai user_file:
untuk user_info dalam user_file:
nama_pengguna.tambahkan (user_info.berpisah () [0])
mel_pengguna.tambahkan (user_info.berpecah () [1])
kembalikan nama pengguna, alamat_ pengguna
def read_template (nama_fail):
dengan terbuka (nama_file, 'r', pengekodan = 'utf-8') sebagai msg_template:
msg_template_content = msg_template.baca ()
kembali Templat (msg_template_content)
def utama ():
user_name, user_email = get_users_data ('pengguna.txt ') # baca butiran pengguna
message_template = read_template ('mesej.txt ')
# sediakan pelayan SMTP
smtplib_server = smtplib.SMTP (hos = 'smtp.gmail.com ', port = 587)
smtplib_server.permulaan ()
smtplib_server.log masuk (SEND_FROM, EMAIL_PWD)
# Dapatkan setiap maklumat pengguna dan hantarkan e-mel:
untuk nama, e-mel dalam zip (nama_pengguna, alamat_ pengguna):
multipart_message = MIMEMultipart () # buat mesej
# tambahkan nama orang sebenar ke templat mesej
msg = message_template.pengganti (PERSON_NAME = nama.tajuk ())
# Mencetak badan mesej untuk kepentingan kita
cetak (msg)
# tetapkan parameter mesej
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mel
multipart_message ['Subject'] = "E-mel LinuxHint"
# tambah dalam badan mesej
pesanan berbilang bahagian.lampirkan (MIMEText (msg, 'plain'))
# hantar mesej melalui pelayan yang disiapkan lebih awal.
smtplib_server.hantar_mesej (multipart_message)
del multipart_message
# Tamatkan sesi SMTP dan tutup sambungan
smtplib_server.berhenti ()
jika __nama__ == '__main__':
utama ()

Semasa kami menjalankan program ini dengan ID Gmail, anda mungkin menghadapi masalah seperti ini:

Ralat SMTP Gmail


Ini kerana Gmail tidak membenarkan skrip biasa menggunakan API Gmail. Untuk ini, anda mungkin perlu mematikan log masuk keselamatan di akaun Gmail anda. Baca mengenai cara melakukannya untuk Gmail di sini.

Kesimpulannya

Dalam pelajaran ini, kami melihat bagaimana kami dapat menghantar e-mel menggunakan Python's smtplib modul.

Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...