Python實現(xiàn)發(fā)送帶有pdf附件的電子郵件
前言
使用Python發(fā)郵件,是個簡單的話題,可是如何可以優(yōu)雅的輕松的群發(fā)郵件,并附加PDF附件,是很多小伙伴的日常工作,卻也是很多小白需要費力才能解決的問題。為了方便理解和使用,本文對郵件發(fā)送進行了類的包裝。將連接服務(wù)器、生成郵件、發(fā)送郵件分開執(zhí)行??梢越鉀Q工作中遇到的絕大部分問題。
話不多說,上代碼。
提示:以下是本篇文章正文內(nèi)容,郵箱配置參數(shù)需要自行修改方可使用
一、如何使用Python發(fā)送電子郵件
使用Python發(fā)送電子郵件我們可以借用smtplib模塊,smtplib是一個 Python 庫,用于使用簡單郵件傳輸協(xié)議(SMTP)發(fā)送電子郵件。 smtplib是內(nèi)置模塊; 我們不需要安裝它。 它抽象了 SMTP 的所有復(fù)雜性。發(fā)送郵件只要設(shè)置好參數(shù)即可。
二、使用步驟
1. 配置郵箱參數(shù)
下面以常用的QQ郵箱舉例,需要自行修改相應(yīng)參數(shù)配置。同樣也適用于其它郵箱。
請先確保SMTP服務(wù)已開啟,如下圖。

QQ郵箱的發(fā)送服務(wù)器為:smtp.qq.com,郵件發(fā)送服務(wù)器端口普通為25,使用SSL,端口為465或587。

# 1、設(shè)置郵件服務(wù)器配置信息及登錄郵箱賬號
config = {
'stmpServer' : 'smtp.qq.com',# 郵件發(fā)送服務(wù)器地址
'stmpPort' : 25,# 郵件發(fā)送服務(wù)器端口:普通為25,QQ郵箱SMTP服務(wù)器(端口465或587)
'fromEmailAddr' : 'send@qq.com', # 郵件發(fā)送方郵箱地址
'password' : 'password', # 郵箱密碼
}
2.發(fā)送帶有pdf附件郵件完整源碼(含演示代碼)
# -*- coding: utf-8 -*-
import smtplib
# 發(fā)送字符串的郵件
from email.mime.text import MIMEText
# 引入MIMEMultipart MIMEApplication類
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
class SendMail:
def __init__(self,config):
self.server = self.connect_mailServer(config)
def connect_mailServer(self,config):
# 登錄并發(fā)送郵件
print('try login')
try:
server = smtplib.SMTP(config['stmpServer'], config['stmpPort'])
server.login(config['fromEmailAddr'], config['password'])
except smtplib.SMTPException as e:
print("smtplib 連接服務(wù)器報錯:", e)
else:
print('login success')
return server
def generate_email(self, subject, text, file, fromEmailAddr, toEmailAddr):
# 生成email主題、正文、附件信息
# ---------------------------發(fā)送帶附件郵件-----------------------------
# 郵件內(nèi)容設(shè)置
message = MIMEMultipart()
# 郵件主題
message['Subject'] = subject
# 發(fā)送方信息
message['From'] = fromEmailAddr
# 接受方信息
message['To'] = toEmailAddr
# 郵件正文內(nèi)容
message.attach(MIMEText(text, 'plain', 'utf-8'))
# 添加PDF附件
with open(file, "rb") as f:
attach = MIMEApplication(f.read(),_subtype="pdf")
attach.add_header('Content-Disposition','attachment',filename=str(file.split('\\')[-1]))
message.attach(attach)
return message
if __name__ == '__main__':
# from mailto import SendMail #將此文件保存為mailto.py 放在調(diào)用文件同目錄即可使用此語句調(diào)用,下面是調(diào)用所需代碼。
# 1、設(shè)置郵件服務(wù)器配置信息及登錄郵箱賬號
config = {
'stmpServer' : 'smtp.qq.com',# 郵件發(fā)送服務(wù)器地址
'stmpPort' : 25,# 郵件發(fā)送服務(wù)器端口:普通為25,QQ郵箱SMTP服務(wù)器(端口465或587)
'fromEmailAddr' : 'send@qq.com', # 郵件發(fā)送方郵箱地址
'password' : 'password', # 郵箱密碼
}
# 2、構(gòu)造郵件基本內(nèi)容
subject = '這是一封測試郵件'
text = '測試郵件,附件是pdf'
# 構(gòu)造附件,假設(shè)存在以下目錄,注意附件路徑為\\,因為在提取文件名時會用到。
file = 'D:\\測試PDF.pdf'
# 3、開始發(fā)送郵件
# 3.1 發(fā)送單封郵件:
if 1:
#生成email主題、正文、附件信息
fromEmailAddr = config['fromEmailAddr']
toEmailAddr = 'fisrt@qq.com'
mail = SendMail(config)
message = mail.generate_email(subject, text, file, fromEmailAddr, toEmailAddr)
mail.server.sendmail(fromEmailAddr, toEmailAddr, message.as_string())
print('sendmail to '+toEmailAddr+' success')
mail.server.quit()
# 3.2 發(fā)送多封郵件,對方郵箱存為list
if 1:
fromEmailAddr = config['fromEmailAddr']
toEmailAddr_list = ['fisrt@qq.com','second@qq.com']
mail = SendMail(config)
same = True #這里表示郵件內(nèi)容一致
message = None
if isinstance(toEmailAddr_list,list):
# 如果列表就是多地址,使用群發(fā)
for toEmailAddr in toEmailAddr_list:
if not same or message is None:
# 第一次需要生成新郵件。如果每次標題不一樣,請在循環(huán)內(nèi)自行修改subject, text, file參數(shù)
message = mail.generate_email(subject, text, file, fromEmailAddr, toEmailAddr)
try:
mail.server.sendmail(fromEmailAddr, toEmailAddr, message.as_string())
except smtplib.SMTPException as e:
print("smtplib 發(fā)送郵件報錯:", e)
else:
print('sendmail to '+toEmailAddr+' success')
print('sendmail finished')
mail.server.quit()
總結(jié)
此方法可以拓展后可以發(fā)送任何類型附件,可以根據(jù)需要對每個發(fā)送對象自定義郵件文本和附件。特別適合需要群發(fā)郵件的小伙伴,關(guān)鍵是通過自定義發(fā)送給不同的對象,如果使用Foxmail等工具需要一封一封的編寫郵件內(nèi)容,使用這個工具就可以完全避免這個麻煩,省時省力!
到此這篇關(guān)于Python實現(xiàn)發(fā)送帶有pdf附件的電子郵件的文章就介紹到這了,更多相關(guān)Python發(fā)送帶pdf附件郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用tkinter實現(xiàn)一個簡易番茄鐘的示例代碼
番茄鐘是番茄工作法使用的一個時間表,即選擇一個待完成的任務(wù),將番茄時間設(shè)為25分鐘,專注工作,中途不允許做任何與該任務(wù)無關(guān)的事,直到番茄時鐘響起,然后在紙上畫一個X短暫休息一下。本文用tkinter實現(xiàn)一個簡易番茄鐘,需要的可以參考一下2022-12-12
Python報mongod:?error?while?loading?shared?libraries:?l
這篇文章主要介紹的是Python報mongod:?error?while?loading?shared?libraries:?libcrypto.so.1.1的解決方法,下面文章解決過程,需要的小伙伴可以參考一下2022-02-02
解決Python 異常TypeError: cannot concatenate ''str'' and ''int''
這篇文章主要介紹了解決Python 異常TypeError: cannot concatenate 'str' and 'int' objects,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04

