Python实现发送带有pdf附件的电子邮件

 更新时间:2023年02月20日 09:14:40   作者:IT里的交易员  
使用Python发邮件,是个简单的话题,可是如何可以优雅的轻松的群发邮件,并附加PDF附件,是很多小伙伴的日常工作。本文就来和大家分享一下实现方法,需要的可以参考一下

前言

使用Python发邮件,是个简单的话题,可是如何可以优雅的轻松的群发邮件,并附加PDF附件,是很多小伙伴的日常工作,却也是很多小白需要费力才能解决的问题。为了方便理解和使用,本文对邮件发送进行了类的包装。将连接服务器、生成邮件、发送邮件分开执行。可以解决工作中遇到的绝大部分问题。

话不多说,上代码。

提示:以下是本篇文章正文内容,邮箱配置参数需要自行修改方可使用

一、如何使用Python发送电子邮件

使用Python发送电子邮件我们可以借用smtplib模块,smtplib是一个 Python 库,用于使用简单邮件传输协议(SMTP)发送电子邮件。 smtplib是内置模块; 我们不需要安装它。 它抽象了 SMTP 的所有复杂性。发送邮件只要设置好参数即可。

二、使用步骤

1. 配置邮箱参数

下面以常用的QQ邮箱举例,需要自行修改相应参数配置。同样也适用于其它邮箱。

请先确保SMTP服务已开启,如下图。

QQ邮箱的发送服务器为:smtp.qq.com,邮件发送服务器端口普通为25,使用SSL,端口为465或587。

    # 1、设置邮件服务器配置信息及登录邮箱账号
    config = {
        'stmpServer' : 'smtp.qq.com',# 邮件发送服务器地址
        'stmpPort' : 25,# 邮件发送服务器端口:普通为25,QQ邮箱SMTP服务器(端口465或587)
        'fromEmailAddr' : 'send@qq.com', # 邮件发送方邮箱地址
        'password' : 'password', # 邮箱密码
    }

2.发送带有pdf附件邮件完整源码(含演示代码)

# -*- coding: utf-8 -*-

import smtplib
# 发送字符串的邮件
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):     
        # 登录并发送邮件
        print('try login')
        try:
            server = smtplib.SMTP(config['stmpServer'], config['stmpPort'])
            server.login(config['fromEmailAddr'], config['password'])
        except smtplib.SMTPException as e:
            print("smtplib 连接服务器报错:", e)
        else:
            print('login success')
            return server

    def generate_email(self, subject, text, file, fromEmailAddr, toEmailAddr):
        # 生成email主题、正文、附件信息
        # ---------------------------发送带附件邮件-----------------------------
        # 邮件内容设置
        message = MIMEMultipart()
        # 邮件主题
        message['Subject'] = subject
        # 发送方信息
        message['From'] = fromEmailAddr
        # 接受方信息
        message['To'] = toEmailAddr
        # 邮件正文内容
        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 放在调用文件同目录即可使用此语句调用,下面是调用所需代码。
	
    # 1、设置邮件服务器配置信息及登录邮箱账号
    config = {
        'stmpServer' : 'smtp.qq.com',# 邮件发送服务器地址
        'stmpPort' : 25,# 邮件发送服务器端口:普通为25,QQ邮箱SMTP服务器(端口465或587)
        'fromEmailAddr' : 'send@qq.com', # 邮件发送方邮箱地址
        'password' : 'password', # 邮箱密码
    }

    # 2、构造邮件基本内容
    subject = '这是一封测试邮件'
    text = '测试邮件,附件是pdf'
    # 构造附件,假设存在以下目录,注意附件路径为\\,因为在提取文件名时会用到。
    file = 'D:\\测试PDF.pdf'
    
   
    # 3、开始发送邮件
    # 3.1 发送单封邮件:
    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 发送多封邮件,对方邮箱存为list
    if 1:
        fromEmailAddr = config['fromEmailAddr']
        toEmailAddr_list = ['fisrt@qq.com','second@qq.com']
        mail = SendMail(config)
        same = True #这里表示邮件内容一致
        message = None
        if isinstance(toEmailAddr_list,list):
            # 如果列表就是多地址,使用群发
            for toEmailAddr in toEmailAddr_list:
                if not same or message is None:
                    # 第一次需要生成新邮件。如果每次标题不一样,请在循环内自行修改subject, text, file参数
                    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 发送邮件报错:", e)
                else:
                    print('sendmail to '+toEmailAddr+' success')
        print('sendmail finished')
        mail.server.quit()
  

总结

此方法可以拓展后可以发送任何类型附件,可以根据需要对每个发送对象自定义邮件文本和附件。特别适合需要群发邮件的小伙伴,关键是通过自定义发送给不同的对象,如果使用Foxmail等工具需要一封一封的编写邮件内容,使用这个工具就可以完全避免这个麻烦,省时省力!

到此这篇关于Python实现发送带有pdf附件的电子邮件的文章就介绍到这了,更多相关Python发送带pdf附件邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3 tkinter实现添加图片和文本

    python3 tkinter实现添加图片和文本

    这篇文章主要为大家详细介绍了python3 tkinter实现添加图片和文本,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • TensorFlow平台下Python实现神经网络

    TensorFlow平台下Python实现神经网络

    这篇文章主要为大家详细介绍了TensorFlow平台下Python实现神经网络,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python 网络编程常用代码段

    python 网络编程常用代码段

    这篇文章主要介绍了python 网络编程常用代码段,需要的朋友可以参考下
    2016-08-08
  • Python图像处理之对比两张图片的差异示例

    Python图像处理之对比两张图片的差异示例

    这篇文章主要给大家介绍了关于Python图像处理之对比两张图片的差异,Python提供了一些库和工具可以用于图片的相似度比对,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 初学python数学建模之数据导入(小白篇)

    初学python数学建模之数据导入(小白篇)

    本篇文章是小白篇初学python的同学可以来共同学习了,本篇文章主要讲解了python数学建模过程中的第一步数据导入,数据导入是所有数模编程的第一步,比你想象的更重要
    2021-08-08
  • 如何利用Python批量处理行、列和单元格详解

    如何利用Python批量处理行、列和单元格详解

    因为之后的工作可能会经常用到excel,而且也不想荒废Python,出于为以后做准备以防不时之需,下面这篇文章主要给大家介绍了关于如何利用Python批量处理行、列和单元格的相关资料,需要的朋友可以参考下
    2021-09-09
  • python应用Axes3D绘图(批量梯度下降算法)

    python应用Axes3D绘图(批量梯度下降算法)

    这篇文章主要为大家详细介绍了python应用Axes3D绘图,批量梯度下降算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • django框架cookie和session用法实例详解

    django框架cookie和session用法实例详解

    这篇文章主要介绍了django框架cookie和session用法,结合实例形式详细分析了Django框架cookie和session的功能、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • Python中使用bidict模块双向字典结构的奇技淫巧

    Python中使用bidict模块双向字典结构的奇技淫巧

    bidict模块通过一对一映射结构的处理为Pyhton带来双向字典,能够更加利用Python的切片功能,这里我们就来学习Python中使用bidict模块双向字典结构的奇技淫巧:
    2016-07-07
  • 浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

    浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估

    这篇文章主要介绍了Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估,本文通过一段代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论