Python模块学习 ---- smtplib模块

比特觅星使
• 阅读 1260

SMTP

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。这里我们就需要用到这个库。其中SMTP支持smtplib和Email两个模块,其中smtplib负责发送邮件,email负责构建邮件,SMTP支持发送纯文本,携带附件和携带图片等功能。

1、首先导入smtplib模块和email模块中MIMEText(表示文本)

2、准备发送邮件所需要的参数(服务器,发送者账号,密码,和收件人账号)

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># 服务器地址
smtpserver = 'smtp.163.com' # 发送账号
user = 'XXXXXXXX@163.com' # 发送密码
password = 'xxxxxxx' # 收件人
receivers = '821006052@qq.com'</pre>

3、根据源码内容完成对参数对应填写

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># 邮件标题
subject = 'python 发送邮件' # 发送内容 (文本内容,发送格式,编码格式)
message = MIMEText('Python 通过smtplib发送邮件。。。', 'html', 'utf-8')

发送地址

message['From'] = user

接受地址

message['To'] = receivers

邮件标题

message['subject'] =subject</pre>

4、通过对smtplib模块对邮件进行发送

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;">smtp = smtplib.SMTP()

连接服务器

smtp.connect(smtpserver)

登录邮箱账号

smtp.login(user,password)

发送账号信息

smtp.sendmail(user,receivers,message.as_string())

关闭

smtp.quit()</pre>

携带附件

我们正常发送邮件的时候可能会携带一些附件,当然这个功能python也可以帮助我们完成,SMTP中自带的有携带附件的模块。

1、导入email中的MIMEMultipart模块

2、准备发送邮件的配置和参数

3、邮件携带的附件

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># coding:utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart

服务器地址

smtpserver = 'smtp.163.com' # 发送账号
user = 'xxxxxx@163.com' # 发送密码
password = 'xxxxx' # 收件人
receivers = '821006052@qq.com' # 邮件标题
subject = 'python 发送携带附件邮件' # 获取附件信息
with open('name.txt','rb',)as f:

body = f.read().decode()

message = MIMEMultipart()

发送地址

message['From'] = user

接受地址

message['To'] = receivers

邮件标题

message['subject'] =subject

正文内容

body = MIMEText(body, 'html', 'utf-8')
message.attach(body)

传当前目录中的name.txt文件

att = MIMEText(open('name.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream' # 死格式

filename 表示附件的名称

att["Content-Disposition"] = 'attachment; filename="name.txt"' message.attach(att)
smtp = smtplib.SMTP()

连接服务器

smtp.connect(smtpserver)

登录邮箱账号

smtp.login(user,password)

发送账号信息

smtp.sendmail(user,receivers,message.as_string())

关闭

smtp.quit()</pre>

如果想要添加多个附件的话继续重新传取附件内容,只需要更改不同的附件名称即可

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># 传当前目录中的name.txt文件
att = MIMEText(open('name.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream' # 死格式

filename 表示附件的名称

att["Content-Disposition"] = 'attachment; filename="name.txt"'</pre>

邮件中添加图片

我们正常发送邮件的时候可以添加图片,当然python发送一样可以帮助我们完成这个需求

1、添加图片,需要用到email中的MIMEImage模块

2、准备发送邮件的配置和参数

3、邮件携带的附件

由于html中不能添加图片链接,因为会被认为是恶意链接,我们可以通过在html写入图片ID,通过ID进行匹配图片内容

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># 添加图片
img_body = ''' <html>
<head>Python 发送携带图片信息</head>
<body>
<p>
<p><img src="cid:imageid"></p>
<p>
</body>
</html>
''' # 正文内容
body = MIMEText(img_body, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()

定义图片ID在HTML中展示

mag.add_header('Content-ID', 'imageid')

添加图片图片

message.attach(mag)

添加body内容

message.attach(body)</pre>

完整代码:

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># coding:utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage

服务器地址

smtpserver = 'smtp.163.com' # 发送账号
user = 'xxxxx@163.com' # 发送密码
password = 'xxxxxxx' # 收件人
receivers = '821006052@qq.com' # 邮件标题
subject = 'python 发送图片邮件' message = MIMEMultipart()

添加图片

img_body = ''' <html>

<head>Python 发送携带图片信息</head>

<body>

<p>
<p><img src="cid:imageid"></p>
<p>
</body>
</html>
''' # 正文内容
body = MIMEText(img_body, 'html', 'utf-8')
f = open('123.jpg','rb')
mag = MIMEImage(f.read())
f.close()

定义图片ID在HTML中展示

mag.add_header('Content-ID', 'imageid')

添加图片信息

message.attach(mag)

添加正文

message.attach(body)

发送地址

message['From'] = user

接受地址

message['To'] = receivers

邮件标题

message['subject'] =subject

非SSL邮箱

smtp = smtplib.SMTP()

连接服务器

smtp.connect(smtpserver)

登录邮箱账号

smtp.login(user,password)

发送账号信息

smtp.sendmail(user,receivers,message.as_string())

关闭

smtp.quit()</pre>

注意: 上面的使用一些常规的邮箱,如果你的发件邮箱有SSL认证的需要打开认证信息,比如QQ邮箱需要配置一些信息

QQ邮箱举例:

1、进入-设置--账户--POP3服务内容,打开POP3/SMTP服务

2、开启后会给一个密码,这个密码就是我们需要登录的密码,复制保存下来

3、上面的代码中需要更改服务器内容

<pre style="margin: 0px; padding: 0px; overflow-wrap: break-word; font-family: &quot;Courier New&quot; !important; font-size: 12px !important;"># SSL邮箱(QQ邮箱)
smtp = smtplib.SMTP_SSL(smtpserver, 465)

登录邮箱账号

smtp.login(user,password)

发送账号信息

smtp.sendmail(user,receivers,message.as_string())

关闭

smtp.quit()</pre>

文末福利

点击领取2020Python资料合集,视频&电子书
Python模块学习 ---- smtplib模块

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
最全总结!聊聊 Python 发送邮件的几种方式
1\.前言邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到我们都知道Python内置了对SMTP的支持,可以发送纯文本、富文本、HTML等格式的邮件本文将聊聊利用 Python发送邮件的3种方式2\.准备以126邮箱为例,在编码之前,我们需要开启SMTP服务然后,手动新增一个授权码其中,账号、授权码和服务器地址用于连接登录
Irene181 Irene181
4年前
最全总结!聊聊 Python 发送邮件的几种方式
1\.前言邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到我们都知道Python内置了对SMTP的支持,可以发送纯文本、富文本、HTML等格式的邮件本文将聊聊利用 Python发送邮件的3种方式2\.准备以126邮箱为例,在编码之前,我们需要开启SMTP服务然后,手动新增一个授权码其中,账号、授权码和服务器地址用于连接登录
徐小夕 徐小夕
4年前
如何使用nodejs自动发送邮件?
之前用Nodejs做了很多服务端模块,最近抽空复盘一下,接下来笔者将介绍如何使用Nodejs来自动向用户发送邮件.笔者将详细介绍自动发送邮箱的实现方案,以及通过一个实际的案例来带大家掌握使用nodejs自动发送邮件,最后会介绍一些实际的应用场景,来加深对该方案的理解,达到学以致用的目的.实现方案实现自动发送邮件笔者采用了基于Nod
Wesley13 Wesley13
3年前
JavaMail发送和接收邮件API(详解)
一、JavaMail概述:    JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。    厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:SMTP:简单邮件传输
Stella981 Stella981
3年前
Python发邮件:发邮件总结
1、登录SMTP服务器首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):import smtplibserver  smtplib.SMTP('smtp.163.com', 25)server.login('j_hao104@163
Easter79 Easter79
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Stella981 Stella981
3年前
C++基于Smtp协议发送邮件
SMTP协议的定义:  SMTP是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议;  SMTP是建立在TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知;  SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持;  SMTP重要特性之一是其能跨越网络传
Stella981 Stella981
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
Linuxprobe15
电子邮件系统简单邮件传输协议(SimpleMailTransferProtocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。邮局协议版本3(PostOfficeProtocol3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。Internet消息访问协议版本4(In
Wesley13 Wesley13
3年前
.net 获取邮箱邮件列表和内容
  需求:  最近项目里遇到了个问题,对方没有提供直接获取数据源的api接口,而是通过邮件发数据的。这就需要接收邮件后解析邮件内容获得数据。  分析:  想在代码里实时获取邮件,可以通过邮件的几个协议来实现,常用的几个协议有POP3协议,SMTP协议,IAMP协议。  1.pop3:(PostOfficeProtocal3),3是版本
比特觅星使
比特觅星使
Lv1
蓟城通漠北,万里别吾乡。
文章
4
粉丝
0
获赞
0