Python SMTP untuk mengirim email
SMTP (Simple Mail Transfer Protocol) yang Simple Mail Transfer Protocol, yang merupakan seperangkat aturan untuk transmisi pesan dari sumber ke tujuan, yang harus mengontrol jalan huruf transit.
smtplib python menyediakan cara yang sangat nyaman untuk mengirim e-mail. Ini protokol smtp untuk paket sederhana.
Python membuat SMTP sintaks objek adalah sebagai berikut:
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Parameter Deskripsi:
- tuan rumah: host server SMTP. Anda dapat menentukan alamat host ip atau domain nama seperti: w3cschool.cc, ini adalah parameter opsional.
- port: Jika Anda memberikan parameter tuan rumah, Anda perlu menentukan nomor port yang digunakan oleh layanan SMTP, dalam keadaan normal nomor port SMTP adalah 25.
- local_hostname: Jika SMTP Anda pada mesin ini, Anda hanya perlu menentukan alamat server untuk localhost.
Python SMTP objek menggunakan metode sendmail mengirimkan e-mail dengan sintaks berikut:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]
Parameter Deskripsi:
- from_addr: Alamat e-mail pengirim.
- to_addrs: Daftar string, kirim alamat e-mail.
- msg: Kirim pesan
Di sini kita harus mencatat bahwa argumen ketiga, msg adalah string yang mewakili surat. Kita tahu bahwa pesan umumnya terdiri dari header, pengirim, penerima, isi pesan, lampiran, dll, mengirim email, perhatikan ke format msg. Format ini adalah protokol smtp format definisi.
contoh
Berikut ini adalah pesan yang dikirim menggunakan Python contoh sederhana:
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header sender = '[email protected]' receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("本教程", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
Kami menggunakan tiga tanda kutip untuk mengatur pesan e-mail, standar e-mail memerlukan tigaheader:Dari, Untuk, danSubjek,setiap informasi secara langsung dengan baris perpecahan kosong.
Kami dihubungkan oleh instantiate obyeksmtpObjakses modul smtplib SMTP SMTP untuk, dan mengirim pesan menggunakan metodesendmail.
Lakukan prosedur di atas, jika Anda menginstal Unit sendmail ini, itu akan menampilkan:
$ python test.py 邮件发送成功
Lihat inbox kami (biasanya di tempat sampah), Anda dapat melihat pesan e-mail:
Jika kita tidak memiliki akses asli sendmail, Anda juga dapat menggunakan penyedia layanan email lainnya Akses SMTP (QQ, Netease, Google, dll).
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服务 mail_host="smtp.XXX.com" #设置服务器 mail_user="XXXX" #用户名 mail_pass="XXXXXX" #口令 sender = '[email protected]' receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("本教程", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
Menggunakan Python mengirim pesan dalam format HTML
Kecuali pesan yang dikirim Python dan pesan e-mail berformat HTML dikirim sebagai teks biasa dalam MIMEText _subtype set ke html. kode tertentu sebagai berikut:
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import Header sender = '[email protected]' receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 mail_msg = """ <p>Python 邮件发送测试...</p> <p><a href="http://www.w3big.com">这是一个链接</a></p> """ message = MIMEText(mail_msg, 'html', 'utf-8') message['From'] = Header("本教程", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
Lakukan prosedur di atas, jika Anda menginstal Unit sendmail ini, itu akan menampilkan:
$ python test.py 邮件发送成功
Lihat inbox kami (biasanya di tempat sampah), Anda dapat melihat pesan e-mail:
Python mengirim email dengan lampiran
Mengirim pesan dengan lampiran, Anda pertama kali membuat MIMEMultipart () misalnya, kemudian dibangun lampiran, jika ada beberapa lampiran dapat dibangun secara berurutan. Akhirnya smtplib.smtp dikirim.
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header sender = '[email protected]' receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 #创建一个带附件的实例 message = MIMEMultipart() message['From'] = Header("本教程", 'utf-8') message['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') #邮件正文内容 message.attach(MIMEText('这是本教程Python 邮件发送测试……', 'plain', 'utf-8')) # 构造附件1,传送当前目录下的 test.txt 文件 att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' # 这里的filename可以任意写,写什么名字,邮件中显示什么名字 att1["Content-Disposition"] = 'attachment; filename="test.txt"' message.attach(att1) # 构造附件2,传送当前目录下的 w3big.txt 文件 att2 = MIMEText(open('w3big.txt', 'rb').read(), 'base64', 'utf-8') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="w3big.txt"' message.attach(att2) try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
$ python test.py 邮件发送成功
Lihat inbox kami (biasanya di tempat sampah), Anda dapat melihat pesan e-mail:
Menambahkan gambar dalam teks HTML
pesan teks HTML dalam penyedia layanan email umum untuk menambahkan luar rantai tidak valid, hak untuk menambahkan terobosan ditunjukkan di bawah ini:
#!/usr/bin/python # -*- coding: UTF-8 -*- import smtplib from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header sender = '[email protected]' receivers = ['[email protected]'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 msgRoot = MIMEMultipart('related') msgRoot['From'] = Header("本教程", 'utf-8') msgRoot['To'] = Header("测试", 'utf-8') subject = 'Python SMTP 邮件测试' msgRoot['Subject'] = Header(subject, 'utf-8') msgAlternative = MIMEMultipart('alternative') msgRoot.attach(msgAlternative) mail_msg = """ <p>Python 邮件发送测试...</p> <p><a href="http://www.w3big.com">本教程链接</a></p> <p>图片演示:</p> <p><img src="cid:image1"></p> """ msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8')) # 指定图片为当前目录 fp = open('test.png', 'rb') msgImage = MIMEImage(fp.read()) fp.close() # 定义图片 ID,在 HTML 文本中引用 msgImage.add_header('Content-ID', '<image1>') msgRoot.attach(msgImage) try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, msgRoot.as_string()) print "邮件发送成功" except smtplib.SMTPException: print "Error: 无法发送邮件"
$ python test.py 邮件发送成功
Lihat inbox kami (jika di tempat sampah mungkin perlu untuk pindah ke Inbox sebelum tampilan normal), Anda dapat melihat pesan e-mail:
Untuk informasi lebih lanjut, silakan lihat: https://docs.python.org/2/library/email-examples.html .