溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件

發(fā)布時(shí)間:2023-02-25 13:47:57 來(lái)源:億速云 閱讀:111 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件”文章能幫助大家解決問(wèn)題。

一、如何使用Python發(fā)送電子郵件

使用Python發(fā)送電子郵件我們可以借用smtplib模塊,smtplib是一個(gè) Python 庫(kù),用于使用簡(jiǎn)單郵件傳輸協(xié)議(SMTP)發(fā)送電子郵件。 smtplib是內(nèi)置模塊; 我們不需要安裝它。 它抽象了 SMTP 的所有復(fù)雜性。發(fā)送郵件只要設(shè)置好參數(shù)即可。

二、使用步驟

1. 配置郵箱參數(shù)

下面以常用的QQ郵箱舉例,需要自行修改相應(yīng)參數(shù)配置。同樣也適用于其它郵箱。

請(qǐng)先確保SMTP服務(wù)已開(kāi)啟,如下圖。

Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件

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

Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件

    # 1、設(shè)置郵件服務(wù)器配置信息及登錄郵箱賬號(hào)
    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ù)器報(bào)錯(cuò):", 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)用文件同目錄即可使用此語(yǔ)句調(diào)用,下面是調(diào)用所需代碼。
	
    # 1、設(shè)置郵件服務(wù)器配置信息及登錄郵箱賬號(hào)
    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 = '這是一封測(cè)試郵件'
    text = '測(cè)試郵件,附件是pdf'
    # 構(gòu)造附件,假設(shè)存在以下目錄,注意附件路徑為\\,因?yàn)樵谔崛∥募麜r(shí)會(huì)用到。
    file = 'D:\\測(cè)試PDF.pdf'
    
   
    # 3、開(kāi)始發(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ā)送多封郵件,對(duì)方郵箱存為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:
                    # 第一次需要生成新郵件。如果每次標(biāo)題不一樣,請(qǐng)?jiān)谘h(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ā)送郵件報(bào)錯(cuò):", e)
                else:
                    print('sendmail to '+toEmailAddr+' success')
        print('sendmail finished')
        mail.server.quit()

關(guān)于“Python如何實(shí)現(xiàn)發(fā)送帶有pdf附件的電子郵件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI