Python实现发送带有pdf附件的电子邮件
作者:IT里的交易员 发布时间:2022-02-01 14:08:05
标签:Python,发送,邮件
前言
使用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()
来源:https://blog.csdn.net/popboy29/article/details/126396549
0
投稿
猜你喜欢
- 全球数据量的疯狂增长,使得市场对资深数据库管理员的需求也节节攀升。据统计,一直到2016美国IT市场对数据库管理员的需求量增长都将会超过所有
- monfs :我想知道javascript是否可以实现这样的功能来改变本地的IP地址,例如我本地设置的IP地址是192.168.0.1,我想
- 阅读上一篇教程:WEB2.0网页制作标准教程(8)CSS布局入门接下来开始要真正设计布局了。和传统的方法一样,你首先要在脑海里有大致的轮廓构
- 要想从命令行启动mysqld服务器,你应当启动控制台窗口(或“DOS window”)并输入命令:C
- 一、流程分析分析发现密码加密,且发送POST请求时header必须携带x-csrftoken,否则是报403。而x-csrftoken是在第
- 采集文章给建站带来了很大的方便,特别是一些小网站,人员有限,资金有限,适当的使用采集功能可以很快丰富我们的网站,采集这么厉害可能你会觉的代码
- buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统 consistent:下载期间所涉及的数据保持read only,缺省为n d
- 为什么在facebook交友会更容易?facebook与传统的BSP(Blog Service Provider)到底有什么不同?是因为它有
- 首先呢,需要有两个mysql服务器。如果做测试的话可以在同一台机器上装两个mysql服务程序,注意要两个运行程序的端口不能一样。我用的是一个
- 在python显示图象时,我们用matplotlib模块时会遇到图像色彩失真问题,究竟是什么原因呢,下面就来看看究竟。待显示图像为:impo
- 可能各位朋友看到这个标题很不解,到底什么是习惯化,什么又是去习惯化?下面我来慢慢介绍我的个人理论。习惯化:随着对刺激的熟悉,人们越来越注意不
- 前言文章抄袭在互联网中普遍存在,很多博主都收受其烦。近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制、黏贴后发布标原创屡
- 本文介绍了ORACLE客户端连服务器的注意事项:1. 通过SQL*NET协议,ORACLE客户端连服务器时一般需要配置sqlnet.ora和
- 废话就不多说了,直接上内容。<form action="/home/search" method="ge
- CSS 3 + HTML 5 是未来的 Web,它们都还没有正式到来,虽然不少浏览器已经开始对它们提供部分支持。本文介绍了 5 个 CSS3
- 但是如果在utf-8编码下,一个汉字是占3个字符长度的,比如字符串$str=”你好啊!!”; 如果你用strlen函数来判断,长度是11,正
- 很常见的一个图片轮播Flash,使用之后发现在IE下按F5刷新之后Flash区域就变成一大块背景色,内容轮播出不来了。有趣的是右键点击Fla
- 具体代码如下所示:<%@ page language="java" import="com.studen
- 阅读上一章:Chapter 6 短语元素Chapter 7 锚点HTML中的链接,正确的说法应该称作"锚点",它不仅让我
- 你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。几天