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

目录

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

二、发送邮箱的基本步骤

1. 登录邮箱

2. 准备数据

3. 发送邮件

三、特殊内容的发送

1. 发送附件

2. 发送图片

3. 发送超文本内容

4.邮件模板内容


SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是⼀组⽤于由源地址到⽬的地址传送
邮件的规则,由它来控制信件的中转⽅式。
python的smtplib提供了⼀种很⽅便的途径发送电⼦邮件。它对smtp协议进⾏了简单的封装。

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

如果是163邮箱只需要准备账号和密码;如果是QQ邮箱,需要准备账号和授权码(密码不好⽤),可以
去QQ邮箱官⽹的帮助中⼼去查看授权码的获取⽅式。

二、发送邮箱的基本步骤

1. 登录邮箱

2. 准备数据

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

3. 发送邮件

示例:

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. 发送附件

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

发送附件 

 

示例:

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⽂本中

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格式的邮件本质还是⽂本格式的邮件,所有⽂件的构建⽅式和普通⽂本⽂件的构建⽅式差不多:

示例:

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替代,然后代码编写正文的时候再填充

# 准备账号信息
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()

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值