首頁 > 後端開發 > Python教學 > 技巧 | python定時發送郵件(自動新增附件)針不戳

技巧 | python定時發送郵件(自動新增附件)針不戳

發布: 2023-08-10 16:11:42
轉載
963 人瀏覽過



#本期導讀

###### ########在工作中我們經常需要在每週、每天或其他時間週期做工作報告、文件發送之類的工作,這個時候如果可以設定週期性郵件發送,不用每次手動操作,是不是很方便?本期為大家介紹幾個定時發送郵件相關的函式庫,希望對你有幫助。 ###
主要涉及:

email# -- 設定郵件格式與內容

#

smtplib -- 傳送郵件

schedule -- 定時任務

################################ #####################1. 信箱設定##########
1.1 設定 

登入QQ郵箱,開啟設定-帳戶#(這裡操作的是個人信箱,企業信箱選擇其他信箱即可)

技巧 | python定時發送郵件(自動新增附件)針不戳
#1.2 取得POP3 /SMTP服務授權碼 

第一次操作以下四項皆為關閉狀態(這裡我已經開啟了),點選後面的開啟,要求用綁定的手機發送"配置郵箱客戶端"到指定號碼,照做就可以了,然後會收到服務授權碼

技巧 | python定時發送郵件(自動新增附件)針不戳

#

2. 傳送郵件

2.1 匯入email/smtplib相關模組 
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
登入後複製
##注意:如果沒有相關模組,直接pip install xxx即可。

2.2 email模組 

MIMEText表示文字物件

#MIMEImage:表示圖片物件

MIMEMultipart(有三個子型別):mixed、alternative、related。

  • mixed 郵件中含有附件,必須定義multipart/mixed類型
  • alternative 當郵件包含純文字正文(text/plain)和超文本正文(text/html),必須定義multipart/ alternative類型
  • #related 當郵件中除了附件外還包含內嵌資源時,須定義multipart/ related類型
MIMEAppliction#:封裝附件

2.2.1 #信箱設定 

#
# 设置邮箱的域名
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模組 

用戶端郵件傳送

# 获取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()
登入後複製
运行效果
技巧 | python定時發送郵件(自動新增附件)針不戳


3. 定時任務

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

schedule.every(1).minutes.do(func)
登入後複製

效果:

技巧 | python定時發送郵件(自動新增附件)針不戳

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)
登入後複製

完。


以上是技巧 | python定時發送郵件(自動新增附件)針不戳的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:Python当打之年
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板