利用Python实现邮件发送

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,利用它是⼀一组⽤用于由源地址到⽬目的地址传送

邮件的规则,由它来控制信件的实现中转⽅方式。python的邮件smtplib提供了了⼀一种很⽅方便便的途径发送电⼦子邮件。它对smtp协议进⾏行行了了简单的发送封装。

一. 准备用来发送邮件的利用邮箱账号

准备好邮箱账号和邮箱登录授权码。不同类型邮箱获取授权码的实现方式大同小异,这儿以QQ邮箱为例演示获取授权码步骤:

第一步:用网页登录QQ邮箱,邮件找到帮助中心

第二步:在帮助中心中选择"客户端设置"中的发送第2个问题:

然后按照对应的要求操作,得到授权码并且保存。源码库利用

二. 发送邮件的实现基本步骤

代码发送邮件的步骤,和人工发送邮件步骤基本一致:登录邮箱  -> 准备邮件内容   ->  发送邮件。邮件

2.1 登录邮箱

import smtplib

1. 连接邮箱服务器

连接对象 = smtplib.SMTP_SSL(服务器地址,发送 邮箱服务端口)

- 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱) - 邮箱服务端口:465或者25

2. 登录邮箱 连接对象.login(邮箱账号,利用 授权码)2.2 准备数据

数据指的需要发送的内容。邮件内容的实现构建需要涉及到另外一个库email,它可以⽤来构建邮件主题以及各种形式的邮件邮件内容(包括文字内容、图片内容、html内容、附件)等,这⼉先简单说一下邮件主题和⽂本内容,其他形式的内容在后⾯面邮件内容部分详细讲解。

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.header import Header

1. 创建邮件对象

邮件对象 = MIMEMultipart()

2. 设置邮件主题

主题对象 = Header(邮件标题, 编码方式).encode()

邮件对象[Subject] = 主题对象

3.设置邮件发送者

邮件对象[From] = 用户名 <用户名>

4.设置邮件接受者

邮件对象[To] = 收件⼈1;收件⼈2;收件人3...

5. 添加文字内容

文字内容对象 = MIMEText(内容, 类型, 编码方式)

- 内容:就是亿华云文字字符串

- 类型:plain(简单的⽂字内容)、html(超文本) 邮件对象.attach(文字对象)2.3 发送邮件

三.各种类型邮件发送实例

连接对象.sendmail(发件⼈, 收件人, 邮件对象.as_string())

连接对象.quit()3.1普通文字内容邮件

这类邮件的邮件正文只有普通文字信息,没有超文本也没有图片,并且没有附件:

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.header import Header

# 1. 连接邮箱服务器

con = smtplib.SMTP_SSL(smtp.163.com, 465)

# 2. 登录邮箱

con.login(XXXX@163.com, XXXXX)

# 2. 准备数据

# 创建邮件对象

msg = MIMEMultipart()

# 设置邮件主题

subject = Header(找回密码, utf-8).encode() msg[Subject] = subject

# 设置邮件发送者

msg[From] = XXXX@163.com

# 设置邮件接受者

msg[To] = 726550822@qq.com

# 添加⽂文字内容

text = MIMEText(忘记密码需要找回密码, plain, utf-8)

msg.attach(text)

# 3.发送邮件

con.sendmail(xxxx@163.com, 726550822@qq.com, msg.as_string())

con.quit()

3.2 超文本文件内容

正文更加丰富和有趣的一种邮件,生活中我们接收到的来自各大平台发送的邮件都是这类邮件,核心代码格式如下:

from email.mime.text import MIMEText

html⽂本对象 = MIMEText(html内容字符串, html, 编码方式) 邮件对象.attach(html⽂本对象)

具体代码:

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.header import Header

con = smtplib.SMTP_SSL(smtp.163.com, 465)

con.login(xxxx@163.com, xxxxxx)

msg = MIMEMultipart()

subject = Header(找回密码, utf-8).encode()

msg[Subject] = subject

msg[From] = xxxx@163.com

msg[To] = 726550822@qq.com

# 添加html内容

content = """

我是正⽂中的标题

邮件正文描述性文字1

邮件正⽂描述性文字2

百度图片

百度⼀下

"""

html = MIMEText(content, html, utf-8)

msg.attach(html)

# 发送邮件

con.sendmail(xxxx@163.com, 726550822@qq.com, msg.as_string())

con.quit()

3.3 发送附件

邮件内容除了正文内容,有的时候还需要将各种文件以附件的形式单独发送,发送附件的核心代码如下:

from email.mime.text import MIMEText

⽂文件对象 = MIMEText(⽂件二进制数据, base64, 编码⽅式)

文件对象["Content-Disposition"] = attachment; filename="⽂件名"

邮件对象.attach(⽂件对象)

具体代码:

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.image import MIMEImage

from email.header import Header

from email.mime.message import MIMEMessage from copy import deepcopy

con = smtplib.SMTP_SSL(smtp.163.com, 465)

con.login(xxxx@163.com, xxxxxx)

msg = MIMEMultipart()

subject = Header(⽂文件附件发送, utf-8).encode() msg[Subject] = subject

msg[From] = xxxx@163.com

msg[To] = 726550822@qq.com

# 添加⽂文件附件

file1 = MIMEText(open(files/test.txt, rb).read(), base64, utf-8)

file1["Content-Disposition"] = attachment; filename="test.txt"

msg.attach(file1)

file2 = MIMEText(open(files/pyecharts的云南idc服务商使⽤用.pdf, rb).read(), base64, utf-8)

file2["Content-Disposition"] = attachment; filename="test.pdf"

msg.attach(file2)

# 发送邮件

con.sendmail(xxxx@163.com, 726550822@qq.com, msg.as_string())

con.quit()

应用开发
上一篇:如何防止数据中心漏水
下一篇:在 NVIDIA BlueField DPU 上运行 vSphere,构建现代化数据中心