Home  >  Article  >  Backend Development  >  Tips | Python sends emails regularly (automatically adding attachments) without getting stuck

Tips | Python sends emails regularly (automatically adding attachments) without getting stuck

Python当打之年
Python当打之年forward
2023-08-10 16:11:42943browse



##Introduction to this issue
At work, we often need to do work reports, file sending and other tasks every week, every day or other time periods. At this time, if you can set up periodic email sending, you don’t have to do it manually every time. , isn’t it very convenient? In this issue, I will introduce you to several libraries related to sending emails regularly. I hope it will be helpful to you.
Mainly involved:

email## -- Set email format and content

smtplib -- Send email

schedule -- Scheduled tasks
1. Email settings

1.1 Settings

Log in to your QQ mailbox and open Settings-Account (The operation here is a personal email, for corporate email, select Other EmailThat’s it)

Tips | Python sends emails regularly (automatically adding attachments) without getting stuck
##1.2 Get POP3 /SMTP Service Authorization Code

The following four items are all off for the first operation (I have already turned them on here). Click on the latter to open and require binding. Send "Configuration Email Client" to the designated number on your designated mobile phone, just follow the instructions, and then you will receive Service Authorization Code.

Tips | Python sends emails regularly (automatically adding attachments) without getting stuck


##2. Send email

2.1 Import email/smtplib related modules
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import smtplib
Note: If there is no relevant module, just pip install xxx.

2.2 email module

MIMEText: represents a text object

MIMEImage: represents Picture object

MIMEMultipart( has three subtypes): mixed, alternative, related.

  • mixed When the email contains attachments, must define the multipart/mixed type
  • alternative When the email includes plain text body (text/plain) and hypertext body (text/html), must define multipart/ alternativeType
  • related When the email contains embedded resources in addition to attachments, must define multipart/ relatedType
MIMEApplication:Encapsulate attachment

2.2.1 ##Email Settings

# 设置邮箱的域名
HOST = 'smtp.qq.com'
# 设置邮件标题
SUBJECT = '工作汇报'
# 设置发件人邮箱
FROM = 'aaa@qq.com'
# 设置收件人邮箱,可以同时发送到多个邮箱(用list)
TO = 'bbb@qq.com'
# 设置附件模式
message = MIMEMultipart('mixed')

2.2.2 添加正文 

MIMEText
''' 添加正文 '''
content = '欧sir,附件为最新日期文件,请查收!'
content_msg = MIMEText(content)
message.attach(content_msg)

2.2.3 添加图片文件 

MIMEImage
image_file = open('Python当打之年.jpg', 'rb').read()
image = MIMEImage(image_file)
image.add_header('Content-Disposition', 'attachment', filename='Python当打之年.jpg')
message.attach(image)

2.2.4 添加doc文件 

MIMEApplication
doc = '算法与数据结构.doc'
doc_file = MIMEApplication(open(doc, 'rb').read())
doc_file.add_header('Content-Disposition', 'attachment', filename=doc)
message.attach(doc_file)

2.2.5 添加pdf文件 

MIMEApplication
pdf = 'Python高性能编程.pdf'
pdf_file = MIMEApplication(open(pdf, 'rb').read())
pdf_file.add_header('Content-Disposition', 'attachment', filename=pdf)
message.attach(pdf_file)

2.2.6 添加表格文件 

MIMEApplication
csv_file = open('blockdtas.xlsx', 'rb').read()
csv = MIMEApplication(csv_file)
csv.add_header('Content-Disposition', 'attachment', filename='blockdtas.xlsx')
message.attach(csv)

2.3 smtplib module

##Client email sending

# 获取SSL证书
email_client = smtplib.SMTP_SSL(host='smtp.qq.com')
# 设置域名和端口,端口为465
email_client.connect(HOST, '465')
# 邮箱授权码
email_client.login(FROM, '你的授权码')
email_client.sendmail(from_addr=FROM, to_addrs=TO.split(','), msg=message.as_string())
# 关闭邮件发送客户端
email_client.quit()
运行效果
Tips | Python sends emails regularly (automatically adding attachments) without getting stuck


3. Scheduled tasks

##3.1 schedule library

import schedule as schedule
schedule:是python的一个轻量级定时任务库,可以完成每分钟,每小时,每天,周几,特定日期的定时任务。
eg:每分钟执行一次任务
def func():
    print('{} 执行func'.format(time.strftime("%H:%M", time.localtime())))

schedule.every(1).minutes.do(func)

效果:

Tips | Python sends emails regularly (automatically adding attachments) without getting stuck

3.2 定时发送邮件 

以下是几个周期发送邮件的语法,大家可以自行运行:

# 每1分钟执行一次任务:
schedule.every(1).minutes.do(send_email)
# 每小时执行一次任务:
schedule.every().hour.do(send_email)
# 每天在什么时间点执行一次任务:
schedule.every().day.at('17:30').do(send_email)
# 每10-20分钟(随机)执行一次任务:
schedule.every(10).to(20).minutes.do(send_email)
# 每周一执行一次任务:
schedule.every().monday.do(send_email)
# 每周一什么时间点执行一次任务:
schedule.every().monday.at('09:00').do(send_email)
# 每分钟在第45秒的时候执行任务:
schedule.every().minute.at(':45').do(send_email)

完。


The above is the detailed content of Tips | Python sends emails regularly (automatically adding attachments) without getting stuck. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:Python当打之年. If there is any infringement, please contact admin@php.cn delete