Python 发送SMTP邮件的简单教程
作者:Captain_Li 发布时间:2021-04-27 00:26:51
标签:python,发送邮件,SMTP
目录
一、两个模块
二、SMTP端口
三、四大步骤
1、构造邮件内容
2、连接邮件服务器
3、登陆邮件服务器
4、发送邮件
四、常用场景
1、纯文本邮件
2、发送html文本
3、发送附件
一、两个模块
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之后的一个授权码
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()
来源:https://www.cnblogs.com/lemon-le/p/14858267.html
0
投稿
猜你喜欢
- 本来想等到IE8正式发布时再在blog中写段代码,用来提示IE6用户升级到IE8的,不过貌似IE 8已经RTM了,今天又正好看到这个“升级I
- 在Dreamweaver 4.0中,我们就已接触了模板与库的概念,知道它们是批量生成风格类似的网页的好工具。如今在Dreamweaver M
- 平面设计 常用尺寸 三折页广告 标准尺寸: (A4)210mm x 285mm普通宣传册 标准尺寸: (A4)210mm x 285mm文件
- 算法流程:将图像转换为灰度图像利用Sobel滤波器求出 海森矩阵 (Hessian matrix) :将高斯滤波器分别作用于Ix&s
- 本文实例讲述了php7 图形用户界面GUI 开发。分享给大家供大家参考,具体如下:一、下载指定系统扩展http://pecl.php.net
- 看下面的Java代码,目的是为了当i是3的时候,就不做输出,直接跳到下一个循环。int i = 0; 
- 许多人在编写程序的时候因为贪图方便或不小心使用到程式的保留字,有时明明程序没有错,就是无法正确执行。您知道有哪些常见的保留字吗? 下面的都是
- 前言我们在写应用时,基本都会用到配置文件,从各种 shell 到 nginx 等,都有自己的配置文件。虽然这没有太多难度,但是配置项一般相对
- 在这个教材中,我们假定你已经安装了Scrapy。假如你没有安装,你可以参考这个安装指南。我们将会用开放目录项目(dmoz)作为我
- 网页的布局也许是大家最不放在眼里的地方,其实布局地位如同文字的排版一样,随便可布,布即随便。但是看过我上篇《网页设计技巧系列 之 文本排版》
- 报错现象File "<string>", line 1SyntaxError: unexpected EOF
- 层的八条定律当然,这些并非真正的定律,而只是一些有益的忠告,使你免陷于使用层时可能的困顿中。原来有九条定律的,我们精简掉一条,还有下面的八条
- 来自巴西的设计师Roger Oddone的作品,通过此作品你可以了解到logo的设计的一些思路。
- ajax编程获取Google的PageRank3(PR值)及所在目录,想给你的站增加Google PR查询的功能吗?如果你不会就看看本文吧,
- CREATE TABLE table1( [ID] [bigint] IDENTITY(1,1) NOT NULL, [Name] [nva
- 1.因为oracle 10g暂时没有与win7兼容的版本,我们可以通过对安装软件中某些文件的修改达到安装的目地。 a)打开“\ORACLE1
- reload() 简介作用:用于重新载入之前载入的模块语法格式:reload(module)参数:module为模块对象,必须已经被加载返回
- 自定义数据库自动编号初始值和步进值问题: 如何定义数据库的自动编号字段的初始值和步进值?如何定义自动增加字段的初始值和步进值?如何使删除过数
- 有的时候取出全部数据库记录也许正好满足你的要求,不过,在大多数情况下我们通常只需得到部分记录。这样一来该如何设计查询呢?当然会更费点脑筋了,
- 做设计类网址导航的初衷是为了资源整合,也是在尝试解决问题。假定访问用户都是行业人士,或者目地性很强的有一定了解的用户,应该如何考虑这个组织系