smtplib 邮件自动发送

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

准备需要发送邮件的邮箱账号

如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好用),可以去QQ邮箱官网的帮助中心去查看授权码的获取方式。

发送邮件的基本步骤

  1. 登录邮箱

    import smtplib
    1. 连接邮箱服务器
    连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端口)     - 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
    - 邮箱服务端口:465或者252. 登录邮箱
    连接对象.login(邮箱账号, 密码)- 密码:如果是163邮箱直接使用邮箱的登录密码,如果是qq邮箱就使用授权码
    
  2. 准备数据

    数据指的需要发送的内容。邮件内容的构建需要涉及到另外一个库email,它可以用来构建邮件主题以及各种形式的邮件内容(包括文字内容、图片内容、html内容、附件)等,这儿先简单说一个邮件主题和文本内容,其他形式的内容在后面邮件内容部分详细讲解。

    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    from email.header import Header1. 创建邮件对象
    邮件对象 = MIMEMultipart()2. 设置邮件主题
    主题对象 = Header(邮件标题, 编码方式).encode()
    邮件对象['Subject'] = 主题对象3.设置邮件发送者
    邮件对象['From'] = '用户名 <用户名>'4.设置邮件接受者
    邮件对象['To']    =  '收件人1;收件人2;收件人3...'5. 添加文字内容
    文字内容对象 = MIMEText(内容, 类型, 编码方式)
    - 内容:就是文字字符串
    - 类型:plain(简单的文字内容)、html(超文本)
    邮件对象.attach(文字对象)
    
  3. 发送邮件

    连接对象.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()

特殊内容的发送

1. HTML邮件的构建

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()

2.发送图片

  1. 以附件的形式发送本地图片
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()

  1. 以邮件内容的形式发送图片

    如果想要叫本地图片作为邮件中的内容,需要将图片以<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()
    

3. 发送附件

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

Python通过smtplib发送邮件(2020最新最全版)相关推荐

  1. python安装教程(2020最新)

    python安装教程(2020最新) 一.我们首先要在python的官网把python下载下来. 二.开始安装喽 三.测试是否安装成功 微信公众号:program那些事儿.免费学习python. 一. ...

  2. php mt4,2020最新Thinkphp5.0版微盘|微交易源码|MT4+外汇+贵金属交易 PHP整站源码

    [温馨提示]源码包解压密码:www.youhutong.com 资源描述 2020最新Thinkphp5.0版微盘|微交易源码|MT4+外汇+贵金属交易 PHP整站源码 微盘微交易源码,MT4,外汇, ...

  3. Python使用smtplib发送邮件

    一.邮件分析 此处发送邮件使用smtplib模块,不用下载,pycharm自带的有此模块. 我们通过实例化 smtplib 模块的 SMTP 对象 smtpObj 来连接到 SMTP 访问,并使用 s ...

  4. 2020最新最全的全国省市区五级四级三级地址数据库sql下载,excel下载

    2020年06月17日最新全国省市区行政单位五级.四级.三级数据库sql下载,excel下载. 五级联动.四级联动.三级联动

  5. 各大互联网公司架构演进之路汇总 | 2020最新最全

    △Hollis, 一个对Coding有着独特追求的人△ 整理 l Hollis 来源 l Hollis(ID:hollischuang) 在互联网行业中,有两种优秀的技术人,一种是热衷于分享技术的,一 ...

  6. python下载西瓜视频2020最新思路

    本文针对西瓜视频下载,意在学习分析过程,如有侵权请随时联系 1.获取video_id 简单的办法可以通过selenium加载网页获取video_id,但不是我们想要的,但app又没有video_id的 ...

  7. python 国内镜像源 2020最新

    http://pypi.douban.com/simple/ 豆瓣 http://mirrors.aliyun.com/pypi/simple/ 阿里 http://pypi.hustunique.c ...

  8. 【Python爬虫】【2020最新哔哩哔哩验证码识别实战】【滑块验证码】【附源码】

    哔哩哔哩实战----验证码识别 利用Selenium来模拟B站登录,并实现线极验验证码的识别. 初步分析 B站的登录界面如下: 登录需要完成:1.账户输入:2.密码输入:3.登录后需要通过滑块来进行验 ...

  9. 英雄联盟手游注册及下载教程(ios及安卓android最新最全版)

    据官方消息,28号公测地区的所有用户均可访问游戏,作为苦兮兮的国服安卓选手该如何抢先体验呢? 注意本文以安卓用户为例,ios请在微信公众号搜索:lolsyplay 查看教程. 一.提前下载好Googl ...

最新文章

  1. python实现卡方(Chi-Squared Test)相关性检验
  2. python读文件操作-python文件操作-读写删除复制总结
  3. 第十四章 Linux核心资源
  4. ORACLE 等待事件
  5. linux取消登陆管理器,自动登录linux(不使用登录管理器)
  6. 【bzoj 2461】[BeiJing2011]符环(高维dp+记忆化搜索)
  7. 国务院:《促进大数据发展行动纲要》-全文
  8. Java 战国大富翁,中国古代八大富翁,比皇帝还有钱!其中三位是历史上公认的商圣...
  9. 冰点还原精灵如何安装
  10. 经典聚类算法——Kmeans详解
  11. 从学生到职场,这位百万爬虫博主都经历了什么?
  12. 一文搞懂X509证书PEM DER CRT CER的区别
  13. runtime error python 3.5_Python 3.5 RuntimeError: can't start new thread
  14. 怎么用python下载视频_用python一行代码批量下载哔哩哔哩视频
  15. win10资源管理器explorer总是崩溃重启
  16. 小白程序员应避免的错误
  17. 将你的现实生活照片变成卡通头像
  18. Android 系统禁用触摸屏
  19. 转载:24岁了,做个精致的电子工程师
  20. 【kronecker积rao积,及其它矩阵运算的一些性质】

热门文章

  1. Web 连接远程桌面(3389登陆器) 网页版
  2. 水星450r虚拟服务器,水星MW450R V4无线桥接设置教程 | 192路由网
  3. 关于Android与qt交叉编译:
  4. Python连接MySQL时,报错Warning Truncated incorrect DOUBLE value
  5. AES的CFB模式加解密不一致的原因
  6. 使用SIGCHLD信号捕捉子进程状态
  7. 除了双机或多机热备,你还该有其他方法解决集群路由机宕机(双机热备)
  8. [译] Swift 中的动态特性
  9. UCOSII学习笔录
  10. elgamal签名算法c语言,ElGamal加密、签名算法笔记