Python 发送SMTP邮件的简单教程


Posted in Python onJune 24, 2021

一、两个模块

Python使用SMTP发送邮件的两个模块:smtplib模块、email模块。

  • smtplib:负责发送邮件
  • email:负责构建邮件

二、SMTP端口

1)未加密端口,smtplib.SMTP接口,端口:25
2)使用SSL加密,smtplib.SMTP_SSL接口,端口:465
3)使用TLS加密,端口:587 

三、四大步骤

1、构造邮件内容

# 纯文本
msg = MIMEText(content)
 
# 附件
msg = MIMEMultipart()

2、连接邮件服务器

s = smtplib.SMTP("smtp.qq.com", 25)

3、登陆邮件服务器

s.login(msg_from, passwd)

msg_from:指发送者的邮箱

passwd:指发送者的密码,这个密码不是你的QQ登陆密码,而是你在QQ邮箱设置开启SMTP之后的一个授权码

Python 发送SMTP邮件的简单教程

4、发送邮件

s.sendmail(msg_from, msg_to, msg.as_string())

msg_from:发送方
msg_to:收件方
msg.as_string():要发送的消息

四、常用场景

1、纯文本邮件

import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
 
# 发送者
msg_from = "xxxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件文本
content = 'Python 邮件发送测试...'
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEText对象(还有一些其它参数)
msg = MIMEText(content)
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

2、发送html文本

import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
 
# 发送者
msg_from = "xxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件文本
content = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com" rel="external nofollow" >这是一个链接</a></p>
"""
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEText对象(
msg = MIMEText(content, 'html', 'utf-8')
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

3、发送附件

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
 
 
# 发送者
msg_from = "xxxx@qq.com"
 
# 这里的密码不是QQ邮箱的密码,而是在设置里开启SMTP服务器后的授权码
passwd = "xxxx"
 
# 接受者
msg_to = "xxxx@qq.com"
 
# 邮件主题
subject = "test"
 
# 生成一个MIMEMultipart对象(
msg = message = MIMEMultipart()
 
# 邮件文本
message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
 
# 放入邮件主题
msg['Subject'] = Header(subject, 'utf-8')
 
# 放入发件人
msg['From'] = msg_from
 
# 添加附件
att1 = MIMEText(open('./wordcloud_singer.py', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
msg.attach(att1)
 
try:
    # 连接邮件服务器
    s = smtplib.SMTP("smtp.qq.com", 25)
 
    # 登录到邮箱
    s.login(msg_from, passwd)
 
    # 发送邮件:发送方,收件方,要发送的消息
    s.sendmail(msg_from, msg_to, msg.as_string())
    print('成功')
except s.SMTPException as e:
    print(e)
finally:
    s.quit()

以上就是Python 发送SMTP邮件的简单教程的详细内容,更多关于Python 发送邮件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中定义结构体的方法
Mar 04 Python
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python制作简易注册登录系统
Dec 15 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
Python制作exe文件简单流程
Jan 24 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
python解压zip包中文乱码解决方法
Nov 27 Python
Python开发工具Pycharm的安装以及使用步骤总结
Python语言规范之Pylint的详细用法
Python基础教程,Python入门教程(超详细)
Jun 24 #Python
Django Paginator分页器的使用示例
python随机打印成绩排名表
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 #Python
Python一些基本的图像操作和处理总结
You might like
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
Javascript select下拉框操作常用方法
2009/11/09 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
python中readline判断文件读取结束的方法
2014/11/08 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
python版本的仿windows计划任务工具
2018/04/30 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
《我不是最弱小的》教学反思
2014/02/23 职场文书
超市商业计划书
2014/05/04 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
护士年终考核评语
2014/12/31 职场文书
团员个人总结
2015/02/26 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
施工安全责任协议书
2016/03/23 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js