美文网首页程序员
Python利用SMTP协议发html格式含图片邮件

Python利用SMTP协议发html格式含图片邮件

作者: Cloudox_ | 来源:发表于2019-01-13 15:44 被阅读58次

这里我的环境是Python 3,但Python 2下也能用。

要发邮件需要两个库:smtplib 和 email。其中email库需要额外安装,pip install email 即可。

我们任何一台有以上环境的联网电脑即可实现用SMTP标准协议发邮件,不需要一个配置了什么邮件服务的机器,但是你还是需要一个开通了SMTP协议的邮箱,常用邮箱基本都有相应的配置方法,这里以QQ邮箱举例:

登录QQ邮箱网页版后,在顶部有“设置”,进入后选择“账户”标签页,下拉找到该项设置:

开启第一条应该就可以了,不放心可以把第二条也开了。开通时通过验证后会得到一个授权码,这就是在Python脚本中发邮件时用于验证你账号的东西,这个授权码不需要记住,因为不止一个,每当需要的时候,可以点下面那个“生成授权码”的按钮继续获取就好。

做完以上准备工作后,我们就可以开始编码了。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.utils import parseaddr, formataddr

sender = 'xxxxxxxxxx@qq.com'  # 这里就是你的QQ邮箱
# receiver = 'xxxxxxxx@qq.com'  # 发给单人时的邮件接收邮箱
to_address = ['xxxxxxxx@qq.com', 'xxxxxxxx@qq.com'] # 如果想发给多人,可以放入一个数组
cc_reciver = ['xxxxxxxx@qq.com', 'xxxxxxxx@qq.com'] # 如果想添加抄送人,也可以是单人或者数组的形式
reciver = to_reciver + cc_reciver

smtpserver = "smtp.qq.com" # 邮件服务器,如果是qq邮箱那就是这个了,其他的可以自行查找
username = 'xxxxxxx@qq.com' # 这里还是你的邮箱
password = 'fsdkfjlsjdfljasdfjsa' # 上面获取的SMTP授权码,相当于是一个密码验证

msgRoot = MIMEMultipart('related') # 邮件类型,如果要加图片等附件,就得是这个
msgRoot['Subject'] = '监控日报' # 邮件标题,以下设置项都很明了
msgRoot['From'] = sender
# msgRoot['To'] = receiver # 发给单人
msgRoot['To'] = ",".join( to_address ) # 发给多人
message['Cc'] = ";".join(cc_reciver) # 抄送人


# 以下为邮件正文内容,含有一个居中的标题和一张图片
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('C:\\Users\\cloudoxou\\Desktop\\img.png', '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="data:image/png;base64,%s" alt="image1">"%(base64_data) # 这里简化了html代码
'''

# 连接邮件服务器,因为使用SMTP授权码的方式登录,必须是465端口
smtp = smtplib.SMTP_SSL('smtp.qq.com:465')
smtp.login(username, password)
smtp.sendmail(sender, reciver, msgRoot.as_string())
smtp.quit()

以上就是发送一封html格式的,内含图片的邮件,注释里基本都讲的很清楚了。
如果想把文件加到附件里这种形式,那就不需要在html里引用即可。


查看作者首页

相关文章

  • Python利用SMTP协议发html格式含图片邮件

    这里我的环境是Python 3,但Python 2下也能用。 要发邮件需要两个库:smtplib 和 email。...

  • SMTP 发送邮件

    SMTP 是发送邮件的协议,Python 内置对 SMTP 的支持,可以发送纯文本邮件、HTML 邮件以及带附件的...

  • 61. SMTP发送邮件

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 P...

  • 邮件发送

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 S...

  • Python3实现自动定时发送邮件功能

    Python SMTP发送邮件 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、H...

  • python使用SMTP发送电子邮件

    python使用SMTP发送电子邮件 SMTP是发送邮件的协议,Pytho...

  • Python发送邮件

    Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 Python对SMTP支持有...

  • Python发送邮件(最全)

    简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。 Python提供smtp...

  • python实现SMTP发送邮件

    SMTP协议 SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMT...

  • python -- Email , send(smtp), re

    python Email功能: 发送普通文本邮件 发送带有html格式的邮件 发送带有附件的邮件 发送插入图片到正...

网友评论

    本文标题:Python利用SMTP协议发html格式含图片邮件

    本文链接:https://www.haomeiwen.com/subject/ayxldqtx.html