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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
python读取word文档的方法
May 09 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
python购物车程序简单代码
Apr 18 Python
Python实现查看系统启动项功能示例
May 10 Python
python与caffe改变通道顺序的方法
Aug 04 Python
对python函数签名的方法详解
Jan 22 Python
python3对拉勾数据进行可视化分析的方法详解
Apr 03 Python
为什么说Python可以实现所有的算法
Oct 04 Python
python读取与处理netcdf数据方式
Feb 14 Python
Python阶乘求和的代码详解
Feb 14 Python
Python开发工具Pycharm的安装以及使用步骤总结
Python语言规范之Pylint的详细用法
Python基础教程,Python入门教程(超详细)
Jun 24 #Python
Django Paginator分页器的使用示例
python随机打印成绩排名表
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 #Python
Python一些基本的图像操作和处理总结
You might like
php函数的常用方法及注意之处小结
2011/07/10 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
php扩展开发入门demo示例
2019/09/23 PHP
Javascript的一种模块模式
2010/09/08 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
python中返回矩阵的行列方法
2018/04/04 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
新手常见Python错误及异常解决处理方案
2020/06/18 Python
详解python tcp编程
2020/08/24 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
花坛标语大全
2014/06/30 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
1000字打架检讨书
2014/11/03 职场文书
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL