是我,是你
《道德经》里讲:
“信言不美,美言不信;善者不辩,辩者不善。”
回顾上篇
python操作.ini配置文件增、删、改、查
九月de云,公众号:九月de云python操作.ini文件增、删、改、查,二次独立封装
开始本篇
自动发送邮件,是在工作中比较常用到的方式,比较适合固定流程的产物,本次以QQ邮箱为例。
环境:
Pycharm
Python 3.9.16
安装:
pip install schedule==1.2.0 # 定时调度库
发邮件用到了stmplib包,它是python内置的库,不需要额外的安装
生成授权码
生成授权码是发送邮件的首先要条件,以下是操作步骤:
打开QQ邮箱主界面,点击【设置】,进入【帐户】页面,
找到
点击【开户服务】,需要验证身份,验证完成后:
中间的授权码就是发邮件所需要的,记录下来,发送邮件的代码中会用到。
发送文本邮件
发送纯文本的邮件
# -*- coding: utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
# 发送邮箱服务器
smtp_server = 'smtp.qq.com'
# 发送用户和密码
user = '发送用户'
password = 'ldmxxxxxxxxxxgi'
# 发送邮箱
sender = '发送邮箱'
# 接收邮箱
receiver = ['接收邮箱']
# 抄送邮箱
cc_receiver= ['抄送邮箱1', '抄送邮箱2']
# 发送邮箱主题
subject = '邮件主题'
# 创建一个内容的实例
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = Header(subject, 'utf-8')
msg['To'] = ','.join(receiver)
msg['Cc'] = ','.join(cc_receiver)
# 邮件正文内容
msg.attach(MIMEText('邮件的正文内容', 'plain', 'utf-8'))
# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(user, password)
smtp.sendmail(sender, receiver + cc_receiver, msg.as_string())
smtp.quit()
print("Success")
结果:
发送html内容邮件
发送html格式的内容邮件
以下的html的页面内容后续封装的时候,可以直接读取html页面文件,这样会更清晰(文章最后附源码)
# -*- coding: utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
# 发送邮箱服务器
smtp_server = 'smtp.qq.com'
# 发送用户和密码
user = '发送用户'
password = 'ldmxxxxxxxxxxgi'
# 发送邮箱
sender = '发送邮箱'
# 接收邮箱
receiver = ['接收邮箱']
# 抄送邮箱
cc_receiver= ['抄送邮箱1', '抄送邮箱2']
# 发送邮箱主题
subject = '邮件主题'
# 创建一个内容的实例
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = Header(subject, 'utf-8')
msg['To'] = ','.join(receiver)
msg['Cc'] = ','.join(cc_receiver)
# 邮件正文内容
email_html = '''
<html>
<body>
<style>
table {
border-collapse: collapse;
width: 45%;
}
th, td {
border: 1px solid black;
padding: 8px;
}
th {
background-color: #f2f2f2;
}
</style>
<h1>XXX公司</h1>
<h2>个人信息表</h2>
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>21</td>
</tr>
<tr>
<td>李四</td>
<td>23</td>
</tr>
<tr>
<td>王五</td>
<td>32</td>
</tr>
</tbody>
</table>
</body>
</html>'''
# 将HTML内容添加到邮件对象中
msg.attach(MIMEText(email_html, 'html'))
# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(user, password)
smtp.sendmail(sender, receiver + cc_receiver, msg.as_string())
smtp.quit()
print("Success")
结果:
发送图片邮件
发送图片内容的邮件
图片的展示,其实也是以html格式引入图片
# -*- coding: utf-8 -*-
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 发送邮箱服务器
smtp_server = 'smtp.qq.com'
# 发送用户和密码
user = '发送用户'
password = 'ldmxxxxxxxxxxgi'
# 发送邮箱
sender = '发送邮箱'
# 接收邮箱
receiver = ['接收邮箱']
# 抄送邮箱
cc_receiver= ['抄送邮箱1', '抄送邮箱2']
# 发送邮箱主题
subject = '邮件主题'
# 创建一个内容的实例
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = Header(subject, 'utf-8')
msg['To'] = ','.join(receiver)
msg['Cc'] = ','.join(cc_receiver)
# 添加图片
html_img = f'<p><p>以下是傍晚的海景:</p><br><img lay-src="cid:image1" width="500" height="350"></br></p>'
with open('image.jpg', 'rb') as f:
image_data = f.read()
f.close()
image = MIMEImage(image_data)
image.add_header('Content-ID', '<image1>')
msg.attach(image)
msg.attach(MIMEText(html_img, 'html', 'utf-8'))
# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(user, password)
smtp.sendmail(sender, receiver + cc_receiver, msg.as_string())
smtp.quit()
print("Success")
结果:
发送带附件邮件
发送带附件的邮件
# -*- coding: utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
# 发送邮箱服务器
smtp_server = 'smtp.qq.com'
# 发送用户和密码
user = '发送用户'
password = 'ldmxxxxxxxxxxgi'
# 发送邮箱
sender = '发送邮箱'
# 接收邮箱
receiver = ['接收邮箱']
# 抄送邮箱
cc_receiver= ['抄送邮箱1', '抄送邮箱2']
# 发送邮箱主题
subject = '邮件主题'
# 创建一个内容的实例
msg = MIMEMultipart()
msg['From'] = sender
msg['Subject'] = Header(subject, 'utf-8')
msg['To'] = ','.join(receiver)
msg['Cc'] = ','.join(cc_receiver)
# 邮件构造附件
with open("Pictures.zip", 'rb') as f:
attachment_data = f.read()
f.close()
attachment = MIMEText(attachment_data, 'base64', 'utf-8')
attachment["Content-Type"] = 'application/octet-stream'
attachment["Content-Disposition"] = 'attachment; filename="Pictures.zip"'
msg.attach(attachment)
# 连接发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtp_server)
smtp.login(user, password)
smtp.sendmail(sender, receiver + cc_receiver, msg.as_string())
smtp.quit()
print("Success")
结果:
定时发送邮件
设置时间,每天下午7点整,定时发送邮件
# -*- coding: utf-8 -*-
import schedule
import time
# 设置定时任务
schedule.every().day.at('19:00').do(send_email)
# 持续运行程序
while True:
schedule.run_pending()
time.sleep(1)
单独保存为一个运行.py文件,设置完时间后,直接运行即可~!
总结
以上发送邮件的不同类型内容,可以自由组合
其中【发送用户】user 和 【发送邮箱】sender 没有特殊情况下,是发送方的同一个邮箱号
其中【密码】password 就是第一步获取到的授权码
源码及调用方式:
--config.ini:发送者信息
--email.html:测试发送html的页面
--Email_schedule.py:定时调度任务
--Email_tools.py:发送邮件主方法
--image.jpg:测试发送的图片
--Pictures.zip:测试发送的附件
其中在Email_tools中用到读取ini配置文件ini_tools工具,是上篇分享的:
python操作.ini文件增、删、改、查,二次独立封装
九月de云,公众号:九月de云python操作.ini文件增、删、改、查,二次独立封装
直接使用其中get_items()方法即可!
有需求的朋友可自取哟
后台回复“Email”即可获取~!
文章就分享到这儿,喜欢就点个赞吧!