自动化办公01 smtplib 邮件⾃动发送

目录

一、准备需要发送邮件的邮箱账号

二、发送邮箱的基本步骤

[1. 登录邮箱](#1. 登录邮箱)

[2. 准备数据](#2. 准备数据)

[3. 发送邮件](#3. 发送邮件)

三、特殊内容的发送

[1. 发送附件](#1. 发送附件)

[2. 发送图片](#2. 发送图片)

[3. 发送超文本内容](#3. 发送超文本内容)

4.邮件模板内容


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

邮件的规则,由它来控制信件的中转⽅式。

python的smtplib提供了⼀种很⽅便的途径发送电⼦邮件。它对smtp协议进⾏了简单的封装。

一、准备需要发送邮件的邮箱账号

如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好⽤),可以

去QQ邮箱官⽹的帮助中⼼去查看授权码的获取⽅式。

二、发送邮箱的基本步骤

1. 登录邮箱

2. 准备数据

数据指的需要发送的内容。邮件内容的构建需要涉及到另外⼀个库email ,它可以⽤来构建邮件主

题以及各种形式的邮件内容(包括⽂字内容、图⽚内容、html内容、附件)等,这⼉先简单说⼀

个邮件主题和⽂本内容,其他形式的内容在后⾯邮件内容部分详细讲解。

3. 发送邮件

示例:

python 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart  # 邮件类
from email.header import Header                 # 主题类
from email.mime.text import MIMEText            # 邮件内容类

# 1.连接邮箱服务器
# smtplib.SMTP_SSL(邮箱服务器地址, 端口号)
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 2.登录邮箱
# 连接对象.login(邮箱账号, 授权码)
connect.login('xxxxxxxxxx@qq.com', 'frcdoguixnbgiffd')

# 3.发送邮件
# 1) 准备邮件内容
# a.创建邮件对象(点击写信按钮)
message = MIMEMultipart()

# b.设置邮件主题
message['Subject'] = Header('第一份自动发送的邮件', 'utf-8').encode()

# 设置收件人信息
message['To'] = 'xxxxxxxxxx@qq.com'

# 设置发件人信息
# 注意尖括号前必须用英文
message['From'] = 'WMX<xxxxxxxxxx@qq.com>'

# 设置正文内容
# MIMEText(正文内容, 正文类型, 编码方式)
# 正文类型:plain(普通文本)、html(超文本内容)、base64(文件-附件)
content = MIMEText('hello, handsome boy!', 'plain', 'utf-8')

# 将邮件内容关联到邮件中
message.attach(content)

# 2) 发送邮件
# connect.sendmail(发件人邮箱, 收件人邮箱, 邮件对象.as_string())
connect.sendmail('xxxxxxxxxx@qq.com', 'xxxxxxxxxx@qq.com', message.as_string())

# 关闭连接
connect.close()

三、特殊内容的发送

1. 发送附件

以附件的形式发送本地图⽚

发送附件

示例:

python 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText

# 准备账号信息
sender = '726550822@qq.com'
to = 'y_t209@163.com'
pw = 'zaizvxadkftnbfda'

# 连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录邮箱
connect.login(sender, pw)

# 创建一个空的邮件
message = MIMEMultipart()

# 设置主题
message['Subject'] = Header('发送附件', 'utf-8').encode()

# 设置收件人和发件人信息
message['To'] = to
message['From'] = f'YuTing <{sender}>'

# ================================添加附件=======================================
# 1. 打开需要作为附件发送的文件,并读取文件内容
f1 = open('files/01-Excel快速入门(上).xlsx', 'rb').read()
f2 = open('files/im1.png', 'rb').read()
f3 = open('files/pyecharts的使用.pdf', 'rb').read()

# 2. 创建附件
attachment1 = MIMEText(f1, 'base64', 'utf-8')               # 创建附件对象
attachment1['Content-Disposition'] = 'attachment; filename="Excel.xlsx"'    # 设置附件的显示位置和方式
message.attach(attachment1)                 # 将附件添加到邮件中

attachment2 = MIMEText(f2, 'base64', 'utf-8')
attachment2['Content-Disposition'] = 'attachment; filename="im1.png"'
message.attach(attachment2)

# =================================================================================
# 添加正文
# MIMEText(正文内容, 正文类型, 编码方式)
# 正文类型:plain(普通文本)、html(超文本内容)、base64(文件-附件)
text = MIMEText('相关内容请查看附件!', 'plain', 'utf-8')
message.attach(text)

# 发送邮件
connect.sendmail(sender, to, message.as_string())

# 关闭连接
connect.quit()

2. 发送图片

如果想要叫本地图⽚作为邮件中的内容,需要将图⽚以 <img src='cid:图⽚id'/> 的形式关联到

html⽂本中

python 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# 准备账号信息
sender = 'xxxxxxxx@qq.com'
to = 'xxxxxx@163.com'
pw = 'zaizvxadkftnbfda'

# 连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录邮箱
connect.login(sender, pw)

# 创建一个空的邮件
message = MIMEMultipart()

# 设置主题
message['Subject'] = Header('发送图片', 'utf-8').encode()

# 设置收件人和发件人信息
message['To'] = to
message['From'] = f'YuTing <{sender}>'

# ========================在正文中发送图片================================
# ========第一步:准备图片=======
# 1. 打开图片文件,读文件内容(准备图片数据)
image_data = open('files/im1.png', 'rb').read()
# 2. 创建图片对象
image = MIMEImage(image_data)
# 3. 添加图片ID
image.add_header('Content-ID', '<img1>')
# 4. 将图片对象添加到邮件中
message.attach(image)

# =======第二步:在正文中使用图片=======
# <img src="cid:图片ID">
# <br>  - 换行
text = MIMEText('尊敬的各位领导,您好!<br>请欣赏下面的图片:<br> <img src="cid:img1" style="width:300px;"> <br>谢谢大家!', 'html', 'utf-8')
message.attach(text)
# =============================================================================================
# 发送邮件
connect.sendmail(sender, to, message.as_string())

# 关闭连接
connect.quit()

3. 发送超文本内容

HTML格式的邮件本质还是⽂本格式的邮件,所有⽂件的构建⽅式和普通⽂本⽂件的构建⽅式差不多:

示例:

python 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

# 准备账号信息
sender = 'xxxxxxxxx@qq.com'
to = 'xxxxx@163.com'
pw = 'zaizvxadkftnbfda'

# 连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录邮箱
connect.login(sender, pw)

# 创建一个空的邮件
message = MIMEMultipart()

# 设置主题
message['Subject'] = Header('网上购票系统-用户支付通知', 'utf-8').encode()

# 设置收件人和发件人信息
# 注意尖括号前必须用英文
message['To'] = to
message['From'] = f'12306@rails.com.cn <{sender}>'

# ==========================发送超文本内容========================
# 1. 从html文件中读取网页内容
# 'rt' - 读、文本
html_content = open('files/12306.html', 'rt', encoding='utf-8').read()
# 2. 构建正文内容
text = MIMEText(html_content, 'html', 'utf-8')
message.attach(text)

# ================================================================
# 发送邮件
connect.sendmail(sender, to, message.as_string())

# 关闭连接
connect.quit()

4.邮件模板内容

可以实现准备一个模版,变动的用%s替代,然后代码编写正文的时候再填充

python 复制代码
# 准备账号信息
sender = 'xxxxxxx@qq.com'
to = 'xxxxxxxx@163.com'
pw = 'zaizvxadkftnbfda'

# 连接邮箱服务器
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)

# 登录邮箱
connect.login(sender, pw)

# 创建一个空的邮件
message = MIMEMultipart()

# 设置主题
message['Subject'] = Header('网上购票系统-用户支付通知', 'utf-8').encode()

# 设置收件人和发件人信息
message['To'] = to
message['From'] = f'12306@rails.com.cn <{sender}>'

# ==============================================================
# name = input('请输入购票人姓名:')
# gender = input('请输入购票人性别(男/女):')
# date = input('请输入购票日期:')
# price = input('请输入购票金额:')

# html_content = open('files/12307.html', 'rt', encoding='utf-8').read()
# text = MIMEText(html_content % (name, gender, date, price), 'html', 'utf-8')
# message.attach(text)
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~华~丽~丽~的~分~割~线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')

text_content = open('files/邮件模版.txt', 'rt', encoding='utf-8').read()
text = MIMEText(text_content % ('xxxxxxxxxxxxxxxx'), 'plain', 'utf-8')
message.attach(text)

# ================================================================
# 发送邮件
connect.sendmail(sender, to, message.as_string())

# 关闭连接
connect.quit()
相关推荐
浊酒南街1 小时前
决策树python实现代码1
python·算法·决策树
FreedomLeo12 小时前
Python机器学习笔记(十三、k均值聚类)
python·机器学习·kmeans·聚类
星光樱梦2 小时前
32. 线程、进程与协程
python
阿正的梦工坊2 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
西猫雷婶3 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
海绵波波1073 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
赵谨言4 小时前
基于python网络爬虫的搜索引擎设计
爬虫·python·搜索引擎
code04号4 小时前
python脚本:批量提取excel数据
开发语言·python·excel
hakesashou4 小时前
python如何打乱list
开发语言·python
silver6875 小时前
使用 Python 操作 Excel 表格
python