Python实现发送邮件主要用到smtplib和email模块,其中:
-
smtplib模块主要负责发送邮件的动作、连接邮箱服务器和登录邮箱等操作。 -
email模块用于管理电子邮件消息的库,主要负责构造邮件,如发件人、收件人、主题、正文、附件等。
通过smtplib、email模块可以发送纯文字、HTML、图片、带附件的邮件。
发送纯文字邮件
发送纯文字邮件,首先使用email模块编辑邮件信息,如发件人、收件人、邮件主题和邮件内容等,示例代码如下:
from email.mime.text import MIMEText
from email.header import Header
mail_msg = """
Python 测试邮件...
"""
message = MIMEText(mail_msg, 'plain', 'utf-8') # 邮件内容
message['From'] = Header("白巧克力LIN", 'utf-8') # 发件人名称(可以随便起)
message['To'] = Header("xxx", 'utf-8') # 收件人名称(可以随便起)
message['cc']='xxxxxxxxxxx' # 抄送人(可以随便填)
message['Subject'] = Header('测试邮件', 'utf-8') # 邮件主题
message['Date']='' # 邮件日期,不可省略,可以随便填,最终日期为系统日期
使用MIMEText()方法编辑邮件内容,其中:第一个参数是邮件内容,第二个参数是文本格式,可选值有plain(原生文本模式)、html(网页文本模式),第三个参数是编码方式。
好了,编辑好邮件信息后,接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
import smtplib
sender = 'xxxxxxxxxxx@xxx.com' # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com'] # 收件人邮箱列表
try:
smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn') # 获得邮箱服务器的传输协议证书
smtpObj.connect('smtp.xxx.cn', '服务器端口') # 连接邮箱服务器
smtpObj.login('登录邮箱', '授权码') # 登录邮箱
smtpObj.sendmail(sender,receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print(e)
首先使用smtplib.SMTP_SSL()方法获取邮箱服务器的传输协议证书,其传入的参数为邮箱服务器,常见的邮件服务器如下:
-
谷歌邮箱:smtp.gmail.com,端口号:587; -
新浪邮箱:smtp.sina.com.cn,端口号:25; -
网易邮箱:smtp.163.com,端口号:25; -
Foxmail邮箱:SMTP.foxmail.com,端口号:25; -
QQ邮箱:smtp.qq.com,端口号:25; -
阿里云邮箱:smtp.aliyun.com,SSL加密端口:465;非加密端口:25;
获取传输协议证书后,通过connect()方法连接邮箱服务器,再通过login()方法登录邮箱,最后通过sendmail()方法发送邮件。
发送HTML邮件
发送HTML邮件与发送纯文字邮件类似,发送HTML邮件的邮件内容为HTML文本,MIMEText()方法第二个参数为html,示例代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
mail_msg = """
<body>
Python 测试邮件...
</body>
"""
message = MIMEText(mail_msg, 'html', 'utf-8') # 邮件内容
message['From'] = Header("白巧克力LIN", 'utf-8') # 发件人名称(可以随便起)
message['To'] = Header("xxx", 'utf-8') # 收件人名称(可以随便起)
message['cc']='xxxxxxxxxxx' # 抄送人(可以随便填)
message['Subject'] = Header('测试邮件', 'utf-8') # 邮件主题
message['Date']='' # 邮件日期,不可省略,可以随便填,最终日期为系统日期
sender = 'xxxxxxxxxxx@xxx.com' # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com'] # 收件人邮箱列表
try:
smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn') # 获得邮箱服务器的传输协议证书
smtpObj.connect('smtp.xxx.cn', '服务器端口') # 连接邮箱服务器
smtpObj.login('登录邮箱', '授权码') # 登录邮箱
smtpObj.sendmail(sender,receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print(e)
通过编写HTML代码使邮件内容样式更加丰富,例如为邮件内容字体加粗、加大,发送表格等。
发送图片邮件
发送图片邮件与发送纯文字、HTML邮件有所不同,编辑邮件信息示例代码如下:
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
mail_msg = """
<body>
<p>测试Python发送带图片的邮件...</p>
<p>图片如下:</p>
<p><img src="cid:jpg1" alt="testimage1"></p>
<p><img src="cid:jpg2" alt="testimage2"></p>
</body>
"""
message = MIMEMultipart() # 创建可携带各种资源的实例
message.attach(MIMEText(mail_msg,'html','utf-8')) # 将邮件信息绑定到实例中
with open('1.png', 'rb') as image_file: # 二进制读取图片
msgImage = MIMEImage(image_file.read()) # 将二进制图片放在msgImage变量中
msgImage.add_header('Content-ID', 'jpg1') # 定义图片 ID,在 HTML 文本中引用
message.attach(msgImage) # 将图片绑定到实例中
message['From'] = Header("白巧克力LIN", 'utf-8') # 发件人名称(可以随便起)
message['To'] = Header("xxx", 'utf-8') # 收件人名称(可以随便起)
message['cc']='xxxxxxxxxxx' # 抄送人(可以随便填)
message['Subject'] = Header('测试邮件', 'utf-8') # 邮件主题
message['Date']='' # 邮件日期,不可省略,可以随便填,最终日期为系统日期
首先通过MIMEMultipart()方法创建实例,通过attach()方法将MIMEText()方法的邮件信息绑定到实例中,再通过MIMEImage()方法读取的图片存储在变量msgImage中,通过add_header()方法引用图片,通过attach()方法绑定到实例中。
当我们需要发送多张图片时,只需要重复15行到19行代码即可。
接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
import smtplib
sender = 'xxxxxxxxxxx@xxx.com' # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com'] # 收件人邮箱列表
try:
smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn') # 获得邮箱服务器的传输协议证书
smtpObj.connect('smtp.xxx.cn', '服务器端口') # 连接邮箱服务器
smtpObj.login('登录邮箱', '授权码') # 登录邮箱
smtpObj.sendmail(sender,receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print(e)
发送附件邮件
发送附件邮件与发送图片邮件类似,编辑邮件信息示例代码如下:
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
mail_msg = """
Python测试邮件...
"""
message = MIMEMultipart() # 创建可携带各种资源的实例
message.attach(MIMEText(mail_msg, 'plain', 'utf-8')) # 将邮件信息绑定到实例中
att_annex1 = MIMEText(open('文件1.xlsx', 'rb').read(), 'base64', 'utf-8') # 读取文件1.xlsx文件并构造附件1
att_annex1["Content-Type"] = 'application/octet-stream' # 文件类型,二进制字节流
att_annex1["Content-Disposition"] = 'attachment; filename="1111.xlsx"' # filename为邮件中附件的名字,不支持中文,后缀名要和传输的文件后缀名要一致
message.attach(att_annex1) # 将附件1绑定到实例中
首先使用MIMEMultipart()方法创建可携带各种资源的实例,通过attach()方法将MIMEText()方法的邮件信息绑定到实例中,通过MIMEText()方法将读取到文件构造成附件,通过将参数Content-Type的值设置为’application/octet-stream’告诉浏览器这是一个字节流(浏览器处理字节流的默认方式是下载),通过参数Content-Disposition来编辑附件的文件名并通过attach将附件绑定到实例中。
接下来通过smtplib模块实现发送邮件的动作、连接邮箱服务器和登录邮箱,示例代码如下:
import smtplib
sender = 'xxxxxxxxxxx@xxx.com' # 发件人邮箱
receivers = ['xxxxxxxxx@xxx.com','xxxxxxxxx@xxx.com'] # 收件人邮箱列表
try:
smtpObj = smtplib.SMTP_SSL('smtp.xxx.cn') # 获得邮箱服务器的传输协议证书
smtpObj.connect('smtp.xxx.cn', '服务器端口') # 连接邮箱服务器
smtpObj.login('登录邮箱', '授权码') # 登录邮箱
smtpObj.sendmail(sender,receivers, message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException as e:
print(e)
这样就成功发送附件邮件了。
好了,关于smtplib、email实现发送邮件就讲到这里。
– END –
原文始发于微信公众号(白巧克力LIN):smtplib、email实现邮件发送
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222532.html