赞
踩
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好用),可以去QQ邮箱官网的帮助中心去查看授权码的获取方式。
登录邮箱
import smtplib
1. 连接邮箱服务器
连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端口)
- 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
- 邮箱服务端口:465或者25
2. 登录邮箱
连接对象.login(邮箱账号, 密码)
- 密码:如果是163邮箱直接使用邮箱的登录密码,如果是qq邮箱就使用授权码
准备数据
数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以用来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片内容、html内容、附件)等,这儿先简单说一个邮件主题和文本内容,其他形式的内容在后面邮件内容部分详细讲解。
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header 1. 创建邮件对象 邮件对象 = MIMEMultipart() 2. 设置邮件主题 主题对象 = Header(邮件标题, 编码方式).encode() 邮件对象['Subject'] = 主题对象 3.设置邮件发送者 邮件对象['From'] = '用户名 <用户名>' 4.设置邮件接受者 邮件对象['To'] = '收件人1;收件人2;收件人3...' 5. 添加文字内容 文字内容对象 = MIMEText(内容, 类型, 编码方式) - 内容:就是文字字符串 - 类型:plain(简单的文字内容)、html(超文本) 邮件对象.attach(文字对象)
发送邮件
连接对象.sendmail(发件人, 收件人, 邮件对象.as_string())
连接对象.quit()
示例如下:
"""__author__=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465) # 2. 登录邮箱 con.login('XXXX@163.com', 'XXXXX') # 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart() # 设置邮件主题 subject = Header('找回密码', 'utf-8').encode() msg['Subject'] = subject # 设置邮件发送者 msg['From'] = 'XXXX@163.com <XXXX@163.com>' # 设置邮件接受者 msg['To'] = '726550822@qq.com' # 添加文字内容 text = MIMEText('忘记密码需要找回密码', 'plain', 'utf-8') msg.attach(text) # 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit()
HTML格式的邮件本质还是文本格式的邮件,所有文件的构建方式和普通文本文件的构建方式差不多:
from email.mime.text import MIMEText
html文本对象 = MIMEText(html内容字符串, 'html', 编码方式)
邮件对象.attach(html文本对象)
实例如下:
"""__author__=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header # 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465) # 2. 登录邮箱 con.login('xxxx@163.com', 'xxxxxx') # 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart() # 设置邮件主题 subject = Header('找回密码', 'utf-8').encode() msg['Subject'] = subject # 设置邮件发送者 msg['From'] = 'xxxx@163.com <xxxx@163.com>' # 设置邮件接受者 msg['To'] = '726550822@qq.com' # 添加html内容 content = """ <h2>我是正文中的标题</h2> <p>邮件正文描述性文字1</p> <p>邮件正文描述性文字2</p> <img src='https://www.baidu.com/img/bd_logo1.png'> <center>百度图片</center> <a href='https://www.baidu.com'>百度一下</a> """ html = MIMEText(content, 'html', 'utf-8') msg.attach(html) # 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit()
from email.mime.image import MIMEImage
图片对象 = MIMEImage(图片二进制数据)
图片对象["Content-Disposition"] = 'attachment; filename="图片名"'
邮件对象.attach(图片对象)
- 图片二进制数据:可以通过文件操作去读取
示例如下:
"""__author__=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header # 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465) # 2. 登录邮箱 con.login('xxxx@163.com', 'xxxxxx') # 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart() # 设置邮件主题 subject = Header('图片发送', 'utf-8').encode() msg['Subject'] = subject # 设置邮件发送者 msg['From'] = 'xxxx@163.com <xxxx@163.com>' # 设置邮件接受者 msg['To'] = '726550822@qq.com' # 添加图片附件 image_data = open('files/image.jpg', 'rb').read() image = MIMEImage(image_data) image["Content-Disposition"] = 'attachment; filename="image.jpg"' # 设置图片标题 msg.attach(image) # 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit()
以邮件内容的形式发送图片
如果想要叫本地图片作为邮件中的内容,需要将图片以<img src='cid:图片id'/>
的形式关联到html文本中
from email.mime.image import MIMEImage
图片对象 = MIMEImage(图片二进制数据)
image.add_header('Content-ID', '<自定义图片id>')
邮件对象.attach(图片对象)
示例如下:
"""__author__=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header from copy import deepcopy # 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465) # 2. 登录邮箱 con.login('xxxx@163.com', 'xxxxxx') # 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart() # 设置邮件主题 subject = Header('图片发送', 'utf-8').encode() msg['Subject'] = subject # 设置邮件发送者 msg['From'] = 'xxxx@163.com <xxxx@163.com>' # 设置邮件接受者 msg['To'] = '726550822@qq.com' # 添加文字内容 content = """ <h2>我是正文中的标题</h2> <p>邮件正文描述性文字1</p> <p>邮件正文描述性文字2</p> <img src='cid:image1'> <center>图片显示</center> <a href='https://www.baidu.com'>百度一下</a> """ html = MIMEText(content, 'html', 'utf-8') msg.attach(html) # 添加图片附件 image_data = open('files/image.jpg', 'rb').read() image = MIMEImage(image_data) image.add_header('Content-ID', '<image1>') msg.attach(image) # 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit()
from email.mime.text import MIMEText
文件对象 = MIMEText(文件二进制数据, 'base64', 编码方式)
文件对象["Content-Disposition"] = 'attachment; filename="文件名"'
邮件对象.attach(文件对象)
示例如下:
"""__author__=余婷""" import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.header import Header from email.mime.message import MIMEMessage from copy import deepcopy # 1. 连接邮箱服务器 con = smtplib.SMTP_SSL('smtp.163.com', 465) # 2. 登录邮箱 con.login('xxxx@163.com', 'xxxxxx') # 2. 准备数据 # 创建邮件对象 msg = MIMEMultipart() # 设置邮件主题 subject = Header('文件附件发送', 'utf-8').encode() msg['Subject'] = subject # 设置邮件发送者 msg['From'] = 'xxxx@163.com <xxxx@163.com>' # 设置邮件接受者 msg['To'] = '726550822@qq.com' # 添加文件附件 file1 = MIMEText(open('files/test.txt', 'rb').read(), 'base64', 'utf-8') file1["Content-Disposition"] = 'attachment; filename="test.txt"' msg.attach(file1) file2 = MIMEText(open('files/pyecharts的使用.pdf', 'rb').read(), 'base64', 'utf-8') file2["Content-Disposition"] = 'attachment; filename="test.pdf"' msg.attach(file2) # 3.发送邮件 con.sendmail('xxxx@163.com', '726550822@qq.com', msg.as_string()) con.quit()
~~欢迎大家关注我的b站视频,上面全是我自己录的一些python好玩儿的模块的授课视频,其中包括这篇博客内容的授课视频:https://space.bilibili.com/49719176
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。