[快学Python3]SMTP发送邮件
时间:2022-05-07
本文章向大家介绍[快学Python3]SMTP发送邮件,主要内容包括文本邮件示例、HTML格式邮件、附件格式邮件、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
概述
在本文中,主要介绍使用smtplib进行文本格式、HTML格式和带附件的邮件发送处理。
- 导入smtplib模块
import smtplib
- 关键函数说明
# 创建smtp对象
smtp = smtplib.SMTP([host [, port [, localhost]]] )
# 参数说明
# host: smtp服务地址,例如126邮箱的是:smtp.126.com
# port: smtp服务端口
# localhost: 如果你的smtp服务在本机,则只需指定localhost即可
# 发送邮件函数
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
# 参数说明
# from_addr: 邮件发送地址
# to_addrs: 邮件接收地址列表
# msg: 邮件内容
# mail_options, rcpt_options 可选参数,暂时不需要了解
文本邮件示例
下面演示如何通过126邮箱发送纯文本邮件。
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header
if __name__ == "__main__":
print("发送文本邮件示例")
# 邮件发送者
sender = "deep_test@126.com"
# 邮件接收地址列表
# 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
receivers = "xxx@126.com"
# 发送内容构建
# text标识发送内容为文本格式
msg = MIMEText("微信公众号号:开源优测", "plain", "utf-8")
msg["From"] = "deep_test@126.com"
msg["To"] = receivers
# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")
# smtp服务
smtpserver = "smtp.126.com"
smtpport = 25
# 发送人邮件用户名或专用于smtp账户用户名
username = "deep_test"
# 发送人邮件密码或专用于smtp账户的密码
password = "123456a"
# 构建smtp对象
smtp = smtplib.SMTP()
# 连接到smtp服务
con = smtp.connect(smtpserver, smtpport)
print("连接结果: ", con)
# 登录smtp服务
log = smtp.login(username, password)
print("登录结果:", log)
# 发送邮件
print(receivers)
res = smtp.sendmail(sender, receivers, msg.as_string())
print("邮件发送结果: ", res)
# 退出
smtp.quit()
print("send email finish")
运行上述代码,你的目标邮箱将收到一封测试邮件。
注:最好改为你的自己的邮箱smtp账户,过段时间我会将我的smtp账户启用服务关闭
HTML格式邮件
下面我们试着发送html格式的邮件。
将文本格式邮件代码中的以下部分替换如下:
# 发送内容构建
# html标识发送内容为文本格式
msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>",
"html",
"utf-8")
完整的代码示例如下:
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header
if __name__ == "__main__":
print("发送HTML邮件示例")
# 邮件发送者
sender = "deep_test@126.com"
# 邮件接收地址列表
# 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
receivers = "xxx@126.com"
# 发送内容构建
# html标识发送内容为文本格式
msg = MIMEText("<p>微信公众号号:开源优测</p><a href='http://www.testingunion.com'>开源优测社区</a>>",
"html",
"utf-8")
msg["From"] = "deep_test@126.com"
msg["To"] = receivers
# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")
# smtp服务
smtpserver = "smtp.126.com"
smtpport = 25
# 发送人邮件用户名或专用于smtp账户用户名
username = "deep_test"
# 发送人邮件密码或专用于smtp账户的密码
password = "123456a"
# 构建smtp对象
smtp = smtplib.SMTP()
# 连接到smtp服务
con = smtp.connect(smtpserver, smtpport)
print("连接结果: ", con)
# 登录smtp服务
log = smtp.login(username, password)
print("登录结果:", log)
# 发送邮件
print(receivers)
res = smtp.sendmail(sender, receivers, msg.as_string())
print("邮件发送结果: ", res)
# 退出
smtp.quit() print("send email finish")
注:
- 将plain改为html标识邮件内容为html格式
- 邮件内容采用html语言来格式化
附件格式邮件
下面看看如何发送带附件的邮件。 需要导入新的类,如下:
from email.mime.multipart import MIMEMultipart
需要使用MIMEMultipart构建内容结构,关键代码如下:
# 发送内容构建# html标识发送内容为文本格式
msg = MIMEMultipart()
msg["From"] = "deep_test@126.com"
msg["To"] = receivers
# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")
# 构建邮件正文内容
msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))
# 构造附件,多个附件同理
attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8")
attach1["Content-Type"] = "application/octet-stream"
# 这里filename随意写,将会在邮件中显示
attach1["Content-Disposition"] = "attrachment;filename=code.py"
# 关联附件到邮件中msg.attach(attach1)
完整的代码示例如下:
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
if __name__ == "__main__":
print("发送HTML邮件示例")
# 邮件发送者
sender = "deep_test@126.com"
# 邮件接收地址列表
# 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址
receivers = "xxx@126.com"
# 发送内容构建
# html标识发送内容为文本格式
msg = MIMEMultipart()
msg["From"] = "deep_test@126.com"
msg["To"] = receivers
# 构建邮件标题
msg["Subject"] = Header("开源优测_DeepTest", "utf-8")
# 构建邮件正文内容
msg.attach(MIMEText("微信公众号:开源优测", "plain", "utf-8"))
# 构造附件,多个附件同理
attach1 = MIMEText(open("发送附件邮件.py", 'rb').read(), "base64", "utf-8")
attach1["Content-Type"] = "application/octet-stream"
# 这里filename随意写,将会在邮件中显示
attach1["Content-Disposition"] = "attrachment;filename=code.py"
# 关联附件到邮件中
msg.attach(attach1)
# smtp服务
smtpserver = "smtp.126.com"
smtpport = 25
# 发送人邮件用户名或专用于smtp账户用户名
username = "deep_test"
# 发送人邮件密码或专用于smtp账户的密码
password = "123456a"
# 构建smtp对象
smtp = smtplib.SMTP()
# 连接到smtp服务
con = smtp.connect(smtpserver, smtpport)
print("连接结果: ", con)
# 登录smtp服务
log = smtp.login(username, password)
print("登录结果:", log)
# 发送邮件
print(receivers)
res = smtp.sendmail(sender, receivers, msg.as_string())
print("邮件发送结果: ", res)
# 退出
smtp.quit()
print("send email finish")
小结
上述各示例最终邮件收到如下所示:
- 构建文本和html格式的邮件使用MIMEText构建,使用plain标识文本内容格式,使用html标识html内容格式
- 对于附件格式则需使用MIMEMultipart
- Web层框架对网站中所有异常的统一处理
- Spring MVC__自定义日期类型转换器
- 解决在控制层springmvc框架发出的400状态的错误
- 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)
- MySQL日志文件之错误日志和慢查询日志详解
- 采用HTML5之"data-"机制自由提供数据
- Spring和SpringMVC父子的容器之道---[上篇]
- 快速完成(图片旋转,查看原图)
- Jsp中格式化时间戳的常用标签
- 反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射
- 后台模板管理系统___左侧菜单数据的异步加载
- Shiro眼皮下玩ajax,玩出302 Found
- 对于JSONObject,我只是临时抱佛脚
- 总结切面编程AOP的注解式开发和XML式开发
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CICD(二) Ansible
- JS Sequence Diagrams
- kubernetes(二十一) 微服务链路监控& 自动发布
- kubernetes(八) kubernetes的使用
- kubernetes(九) kubernetes控制器
- kubernetes(十) kubernetes service,ingress&cm,secret
- kubernetes(十一) 存储& statefulset控制器
- kubernetes(十二) 准入控制和helm v3包管理
- JS Flowchart Diagrams
- kubernetes(十三) k8s 业务上线流程(手动版)
- java+appium+安卓模拟器实现app自动化Demo
- webdriver使用已打开过的chrome
- Shortcodes
- Unexpected EOF 远程主机强迫关闭了一个现有的连接 如何处理
- npm 使用问题