本文我會使用gmail 郵箱作爲郵箱測試,[email protected] 是我的私人郵箱,大家也可以對我發送,以幫助大家的郵箱自動化測試
將電子郵件發送給適當的個人,首先要轉換爲PDF,然後再將此PD附加到電子郵件中,然後將所有電子郵件由python
自動化發送。
模塊
開始這個自動化案例之前,你需要將以下模塊導入到demo
中
# 創建PDF
from io import BytesIO
from reportlab.pdfgen import canvas
from django.http import HttpResponse
# 自動化電子郵件
import email, smtplib, ssl
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
你可能不需要上面列出的每個模塊,但是我推薦你還是將其全部導入其中
將內容轉PDF
對於本文,我將編寫一個簡單的示例。我會使用 canvas
創建pdf文件,並添加一些個性化設置,例如背景色,字體和字體大小,一些文本字符串和圖像(圖表)
# 創建pdf
c = canvas.Canvas('automate_report.pdf')
# 設置背景顏色(此顏色爲黃色,我不推薦)
c.setFillColorRGB(1,1,0)
# 選擇字體和字體大小
c.setFont('Helvetica', 30)
# 創建兩個文本字符串並在頁面上設置位置
c.drawString(5, 660,'Missing data chart for Titanic Data')
c.drawString(5, 630, 'Report generated by Python')
# 添加圖像以確定其位置,寬度和高度
c.drawImage('Survival.png', 5,90,480,400)
# show頁面並保存它
c.showPage()
c.save()
注意事項
- 圖像與該python腳本位於同一目錄中
- 這只是一個基本的概述。如果您想了解有關創建更復雜的pdf報告的更多信息,我建議查閱canvas的文檔。
自動化發送電子郵件
我們已經生成了一個pdf文件,正等待通過網絡空間發送。
在我們深入研究代碼之前,你需要創建一個刻錄機電子郵件帳戶,以便可以在自己的電子郵件(而不是朋友的電子郵件)上測試該電子郵件。
# 將關鍵電子郵件方面分配給變量,以便將來進行編輯
subject = "Weekly Report"
body = "This is an email with the desired report attached"
sender_email = "[email protected]"
receiver_email = "[email protected]"
file = "automate_report.pdf"
password = "abc123"
# 創建電子郵件頭(發件人,收件人和主題)
email = MIMEMultipart()
email["From"] = sender_email
email["To"] = receiver_email
email["Subject"] = subject
# 在郵件中添加正文和附件
email.attach(MIMEText(body, "plain"))
attach_file = open(file, "rb")
report = MIMEBase("application", "octate-stream")
report.set_payload((attach_file).read())
encoders.encode_base64(report)
#add report header with the file name
report.add_header("Content-Decomposition", "attachment", filename = file)
email.attach(report)
# 創建用於發送郵件的SMTP會話
session = smtplib.SMTP('smtp.gmail.com', 587)
session.starttls() #enable security
session.login(sender_email, password)
text = email.as_string()
session.sendmail(sender_email, receiver_email, text)
session.quit()
print('已發送郵件')
說明
現在,註釋應該可以幫助你瞭解所有代碼的工作方式以及彼此之間的交互。作爲個人喜好,我喜歡將通常在腳本中硬編碼的內容設置爲一個變量,以便在需要時更易於編輯。