一、python对SMTP的支持

SMTP(Simple Mail Transfer Protocol)是简单传输协议,它是一组用于用于由源地址到目的地址的邮件传输规则。

python中对SMTP进行了简单的封装,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

①email模块:负责构建邮件
②smtplib模块:负责发送邮件

二、可以发送不同格式的邮件

2.1 发送纯文本邮件

# 导入发送邮件模块
import smtplib
# 导入邮件文本
from email.mime.text import MIMEText
# 1.构建邮件
#发送文本格式的邮件
message = """
那小子真帅。
"""
msg = MIMEText(message,'plain','utf-8')
msg['Subject'] = 'xxx'#标题,主题
msg['To'] = 'xxxx@qq.com'#收件人
msg['From'] = 'xxxx@163.com'#发件人
#2.实例化SMTP服务器
server = smtplib.SMTP_SSL('smtp.163.com',994)
#3.登录服务器,第一个参数为邮箱账号,第二个参数为邮箱授权码
server.login('xxx@163.com','xxx')
#4.发送邮件
# 第一个参数为发送方,
sender = 'xxx@163.com'
# 第二个参数为接受方,列表格式,可以发送多个,
receiver = ['xxx@163.com','xxx@foxmail.com']
# 第三个参数msg为邮件内容,需要为字符串格式
server.sendmail(sender,receiver,msg.as_string())
# 5.关闭
server.quit()

2.2 发送HTML格式的邮件

与纯文本邮件整体上相同,只是在邮件本体部分有所区别

# 导入发送邮件模块
import smtplib
# 导入邮件文本
from email.mime.text import MIMEText
# 1.构建邮件
#1.1 发送HTML格式的邮件
html = """
<h2>
    <a href='http://www.baidu.com'>点我跳转</a>
</h2>
"""
msg = MIMEText(html,'html','utf-8')
msg['Subject'] = 'xxx'#标题,主题
msg['To'] = 'xxxx@qq.com'#收件人
msg['From'] = 'xxxx@163.com'#发件人
#2.实例化SMTP服务器
server = smtplib.SMTP_SSL('smtp.163.com',994)
#3.登录服务器,第一个参数为邮箱账号,第二个参数为邮箱授权码
server.login('xxx@163.com','xxx')
#4.发送邮件
# 第一个参数为发送方,
sender = 'xxx@163.com'
# 第二个参数为接受方,列表格式,可以发送多个,
receiver = ['xxx@163.com','xxx@foxmail.com']
# 第三个参数msg为邮件内容,需要为字符串格式
server.sendmail(sender,receiver,msg.as_string())
# 5.关闭
server.quit()

2.3 发送HTML与图片格式的邮件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

sender = 'xxx@163.com'  # 这里就是你的163邮箱
receiver = 'xxx@qq.com'  # 发给单人时的邮件接收邮箱
smtpserver = "smtp.163.com" # 邮件服务器,如果是163邮箱那就是这个了,其他的可以自行查找
username = 'xxxx@163.com' # 这里还是你的邮箱
password = 'xxxxx' # 上面获取的SMTP授权码,相当于是一个密码验证
msgRoot = MIMEMultipart('related') # 邮件类型,如果要加图片等附件,就得是这个
msgRoot['Subject'] = '监控日报' # 邮件标题,以下设置项都很明了
msgRoot['From'] = sender
msgRoot['To'] = receiver # 发给单人
# 以下为邮件正文内容,含有一个居中的标题和一张图片
content = MIMEText('<html><head><style>#string{text-align:center;font-size:25px;}</style><div id="string">我是居中显示的标题<div></head><body><img src="cid:image1" alt="image1"></body></html>','html','utf-8')
# 如果有编码格式问题导致乱码,可以进行格式转换:
# content = content.decode('utf-8').encode('gbk')
msgRoot.attach(content)
# 上面加的图片src必须是cid:xxx的形式,xxx就是下面添加图片时设置的图片id
# 添加图片附件
fp = open('D:\\Desktop\\201283116221721201.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', 'image1') # 这个id用于上面html获取图片
msgRoot.attach(msgImage)
'''
# 另外也可以用base64的方法直接加:
import base64
img_file = open('C:\\Users\\cloudoxou\\Desktop\\img.png','rb')
base64_data = base64.b64encode(img_file.read())
html = "<img src="" alt="image1">"%(base64_data) # 这里简化了html代码
'''
# 连接邮件服务器,因为使用SMTP授权码的方式登录,必须是994端口
smtp = smtplib.SMTP_SSL(smtpserver,994)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()

msg中输入的是邮件正文,因此需要根据具体内容格式选择合适的类型!

三、注意事项

python 发送邮件smtplib 和 email详解 python发送邮件模块_发送邮件


python 发送邮件smtplib 和 email详解 python发送邮件模块_html_02