当先锋百科网

首页 1 2 3 4 5 6 7

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及附带的邮件。Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

1.首先,可以构造一个最简单的纯文本邮件,构造MIMEText对象时,第一个参数就是邮件正文,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性:

from email.mime.text import MIMEText
message = MIMEText('HEllo everyone','plain','utf-8')

 2.通过smtp发送

# 引入包
from email.mime.multipart import MIMEMultipart
# 设置邮箱的域名
HOST = 'smtp.qq.com'
# 设置邮箱的标题
SUBJECT = 'Today is my birthday'
# 发件人
FROM = '[email protected]'
# 收件人
TO = '[email protected]'
# related表示使用内嵌资源的形式,将邮件发送出去;邮件信息,内容为空
message = MIMEMultipart('related')

 3.发送文本和html邮件,发送html邮件,在构造MIMEText对象时,把html字符串传进去,再把第二个参数由plain变为html就可以了。

import smtplib
from email.mime.text import MIMEText
#message_html = MIMEText('hello','plain','utf-8')
message_html = MIMEText('<h2 style="color:red;font-size:100px">Happy</h2><img src="cid:small">','html','utf-8')
# 将邮件内容 装入到邮件信息当中去
message.attach(message_html)

 4.发送图片的两种方式

from email.mime.image import MIMEImage
# rb  读取二进制文件
image_data = open('1.gif','rb')
# 设置读取获取的二进制数据
message_image = MIMEImage(image_data.read())
# 关闭刚才打开的文件
image_data.close()
message_image.add_header('Content-ID','small')
# 添加图片文件到邮件信息当中去 第一种方法
message.attach(message_image)

  第二种方法

# 第二种方法
message_image = MIMEText(open('1.gif','rb').read(),'base64','utf-8')
message_image['Content-disposition'] = 'attachment;filename="1.gif"'
message.attach(message_image)

 5.添加文件,将一个xlsx文档作为内容发送到对方的邮箱;读取excel文件时,是以rb形式读取的,是一个二进制内容,对二进制文件需要设置默认的编码形式。对于MIMEText()来说,默认的编码形式就是base64;如果二进制文件没有设置base64进行编码,附件就会出现乱码。

message_xlsx = MIMEText(open('table.xlsx','rb').read(),'base64','utf-8')
# 设置文件在附件当中的名字
message_xlsx['Content-Disposition'] = 'attachment;filename="test1111.xlsx"'
message.attach(message_xlsx)

 6. SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发送邮件,一次可以发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。

# 设置邮件发件人
message['From'] = FROM
# 设置邮件收件人
message['To'] = TO
# 设置邮件标题
message['Subject'] = SUBJECT

# 获取简单邮件传输协议的证书
email_client = smtplib.SMTP_SSL()
# 设置发件人邮箱的域名和端口  端口为465
email_client.connect(HOST,'465')
# 密码千万不要写邮箱的密码  要写邮箱的授权码------------------------------
result = email_client.login(FROM,'ucgqmwaykuarbccg')

print('登录结果',result)

email_client.sendmail(from_addr=FROM,to_addrs=TO.split(','),msg=message.as_string())
# 关闭邮件发送客户端
email_client.close()