Latest web development tutorials

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 .