Python:详解smtplib+email模块发送电子邮件

350 阅读3分钟

本人已参与【新人创作礼】活动,一起开启掘金创作之路。 本文首发于CSDN hello,大家好,今天我们来学习如何使用smtplib和email模块发送电子邮件,开始学习吧!\

文章目录

1. smtplib模块

smtplib是用来创建与SMTP服务器的连接的。
它有一些常用的类和方法,如下:

import smtplib

# SMTP:创建链接对象 参数为SMTP服务器地址和端口号
smtp = smtplib.SMTP("smtp.*****.com", 1234)
# login:登录邮箱,密码多为账号的授权码
smtp.login(username, password)
# send_message:发送电子邮件对象
smtp.send_message(msg)
# quit:关闭连接
smtp.quit()

2. email模块

email模块是用来根据标准的格式创建电子邮件。
接下来让我们学习如何创建一封电子邮件吧!

2.1 普通文本的电子邮件

# MIMEText用来创建文本电子邮件
from email.mime.text import MIMEText

# MIMEText参数: 正文内容,邮件类型,编码格式
msg = MIMEText("邮件正文", "plain", "UTF-8")
# 设置发送者,接收者,主题等信息
msg['From']    = "from@from.com"
msg['To']      = "to@to.com"
msg['Subject'] = "邮件主题"

以上代码我们创建了一封普通文本的电子邮件,但是,如果我们在正文中插入HTML代码,这些HTML代码是不会执行的,它们会和其他的文本一起显示。支持HTML文本的邮件在下面会说明。

2.2 HTML文本的电子邮件

from email.mime.text import MIMEText

# 将plain改为html
msg = MIMEText("<p>邮件正文</p>", "html", "UTF-8")
msg['From']    = "from@from.com"
msg['To']      = "to@to.com"
msg['Subject'] = "邮件主题"

2.3 添加附件

添加附件的代码比较复杂,因为MIMEText已经满足不了需求了。

# 邮件正文文本
from email.mime.text import MIMEText
# 邮件对象
from email.mime.multipart import MIMEMultipart
# 邮件应用对象
from email.mime.application import MIMEApplication

# 创建邮件对象并设置信息
msg = MIMEMultipart()
msg['From'] = "from@from.com"
msg['To'] = "to@to.com"
msg['Subject'] = "邮件主题"

# 创建正文文本
txt =  MIMEText("Python Test(含附件)", "plain", "UTF-8")
# 加入msg对象
msg.attach(txt)

# 读取文件并创建一个邮件应用
part = MIMEApplication(open("我的测试文件.png", "rb").read())
# 给应用里加入附件 需要指定附件的名称而不是路径
part.add_header('Content-Disposition', 'attachment', filename="测试文件名.png")
# 将part加入msg
msg.attach(part)

在以上代码示例中,我们将文件“我的测试文件.png”加入到了邮件的附件里。

2.4 添加多个附件

可以使用for循环,将上文中的创建邮件应用部分改为如下代码:

file_list = ['file1.doc', "file2.png"]

for filename in file_list:
	part = MIMEApplication(open(filename, "rb").read())
    part.add_header('Content-Disposition', 'attachment', filename=filename)
    msg.attach(part)

3. 发送电子邮件

3.1 获取授权码

这里先介绍一下如何获取邮箱的授权码,这里以网易邮箱为例子,先点击“设置”:
设置
在下拉框中选择“POP3/SMTP/IMAP”:
开启服务1
进入页面后,开启“POP3/SMTP服务”:
开启服务2
然后,根据页面的提示信息完成验证,获取授权码。

3.2 Python自动发送电子邮件

复制你的授权码,开始编写Python程序:

from email.mime.text import MIMEText
import smtplib

# 创建邮件对象并设置信息
msg = MIMEText("您好!这是Python发来的一封邮件!", "plain", "UTF-8")
msg['From'] = "你的邮箱@163.com"
# 测试时,目标邮箱为你的邮箱
msg['To'] = "你的邮箱@163.com"
msg['Subject'] = "邮件主题"

# 网易SMTP服务器地址
smtp = smtplib.SMTP("smtp.163.com")
smtp.login("你的邮箱@163.com", "你的授权码")
# 发送邮件
smtp.send_message(msg)
smtp.quit()

运行代码,可以看到网易邮箱出现了一封未读邮件,如图:
邮件


好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!