SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python对SMTP支持有smtplib
和email
两个模块,email
负责构造邮件,smtplib
负责发送邮件。
构造MIMEText
对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'
,最终的MIME就是'text/plain'
,最后一定要用utf-8
编码保证多语言兼容性。
然后,通过SMTP发出去:
下面是一份邮件完整代码仅参考:
import smtplib
import email
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 设置邮箱域名
HOST = 'smtp.163.com'
# 设置邮件标题
SUBJECT = '今天是我们相恋四年第一个月,陪我这么久,辛苦你了'
# 发件人
FROM = '发送人@163.com'
# 收件人 (可以一次性发送给多个人)
TO = '收件人@qq.com, 收件人@163.com'
# 内空
message = MIMEMultipart('related')
# --------------------------------发送文本------------------------
# 设置内容编码格式,使用utf-8进行编码
message_html = MIMEText('以后的日子还很长的一段路需要你陪我一起走,希望我们在一起的日子会比以前更好','plain','utf-8')
# 将邮件内容 装邮件信息当中
message.attach(message_html)
# -----------------------------------发送图片-----------------------
message_image = MIMEText(open('1.jpg','rb').read(),'base64','utf-8')
message_image['Content-Disposition'] = 'attachment;filename="happy.jpg"'
message.attach(message_image)
# 设置发件人
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,'wang5814')
print('登陆',result)
email_client.sendmail(from_addr=FROM,to_addrs=TO.split(),msg=message.as_string())
email_client.close()
仅供参考:
# smtp simple mail transfer protocol 简单邮件传输协议
# lib library
import smtplib
# 因为需要使用模块 所以当前py文件的名字不能写成email
import email
# MIME 多用于邮件扩充协议
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 设置邮箱的域名
HOST = 'smtp.163.com'
# 设置邮件标题
SUBJECT = '今天是2018年8月10,是我的生日'
# 注意:发件人的邮箱必须是先设置开始smtp协议
FROM = '发件人@163.com'
# 设置收件人邮箱,(可以一次性发送给多个人)
TO = '收件人@163.com,2510959550@qq.com,,'
# related 表示使用内嵌资源的形式,将邮件发送给对方
# message:邮件信息 内容为空
message = MIMEMultipart('related')
# -------------------------------------------发送文本
# 发送邮件主体到对方的邮箱中
# 参数:
# 1.发送的内容 内容必须是字符串
# 2.内容的类型 文本类型默认为plain
# 3.内容的编码方式 使用utf-8进行编码
# message_html = MIMEText('今天星期五,猴开森','plain','utf-8')
message_html = MIMEText('<h1 style="color:red;fond-size:100px">学习使我爱了</h1><img src="cid:small">','html','utf-8')
# 将邮件内容 装入到邮件信息当中去
message.attach(message_html)
# ---------------------------发送图片----------------------
# 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="happy.gif"'
message.attach(message_image)
# ------------------------------添加文件-----------------------
# 将一个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)
# 设置邮件发件人
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,'wang5814')
print('登陆结果',result)
# address地址
#发送邮件
# message = MIMEMultipart('related')message为MINEMulyipart的一个对象
# msg后面的结果必须是一个字符串 , as_atring将整个对象转成一个字符串
email_client.sendmail(from_addr=FROM,to_addrs=TO.split(),msg=message.as_string())
# 关闭邮件发送客户端
email_client.close()