700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Mail小技巧】如何使用Python优雅的发送带有pdf附件的电子邮件(含源代码 小白也会用!)

【Mail小技巧】如何使用Python优雅的发送带有pdf附件的电子邮件(含源代码 小白也会用!)

时间:2022-03-23 04:00:32

相关推荐

【Mail小技巧】如何使用Python优雅的发送带有pdf附件的电子邮件(含源代码 小白也会用!)

如何使用Python优雅的发送电子邮件(含源代码,小白也会用!)

前言一、如何使用Python发送电子邮件?二、使用步骤1. 配置邮箱参数2.发送带有pdf附件邮件完整源码(含演示代码) 总结

前言

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

话不多说,上代码。

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

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

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

二、使用步骤

1. 配置邮箱参数

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

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

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

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

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

# -*- coding: utf-8 -*-import smtplib# 发送字符串的邮件from email.mime.text import MIMEText# 引入MIMEMultipart MIMEApplication类from email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationclass 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 serverdef 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 messageif __name__ == '__main__':# from mailto import SendMail #将此文件保存为mailto.py 放在调用文件同目录即可使用此语句调用,下面是调用所需代码。# 1、设置邮件服务器配置信息及登录邮箱账号config = {'stmpServer' : '',# 邮件发送服务器地址'stmpPort' : 25,# 邮件发送服务器端口:普通为25,QQ邮箱SMTP服务器(端口465或587)'fromEmailAddr' : 'send@', # 邮件发送方邮箱地址'password' : 'password', # 邮箱密码}# 2、构造邮件基本内容subject = '这是一封测试邮件'text = '测试邮件,附件是pdf'# 构造附件,假设存在以下目录,注意附件路径为\\,因为在提取文件名时会用到。file = 'D:\\测试PDF.pdf'# 3、开始发送邮件# 3.1 发送单封邮件:if 1:#生成email主题、正文、附件信息fromEmailAddr = config['fromEmailAddr']toEmailAddr = 'fisrt@'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 发送多封邮件,对方邮箱存为listif 1:fromEmailAddr = config['fromEmailAddr']toEmailAddr_list = ['fisrt@','second@']mail = SendMail(config)same = True #这里表示邮件内容一致message = Noneif 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等工具需要一封一封的编写邮件内容,使用这个工具就可以完全避免这个麻烦,省时省力!

另外,有些PDF文件为了保密,还需要添加水印,只需要在发送邮件时,使用PyPDF2库多增加一补操作即可。具体步骤详见:PDF添加水印

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。