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

  • 前言
  • 一、如何使用Python发送电子邮件?
  • 二、使用步骤
    • 1. 配置邮箱参数
    • 2.发送带有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 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' : '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 发送多封邮件,对方邮箱存为listif 1:fromEmailAddr = config['fromEmailAddr']toEmailAddr_list = ['fisrt@qq.com','second@qq.com']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添加水印

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

  1. Pycharm常用的小技巧汇总,Python新手上路必备,快上车!

    Pycharm作为Python开发最常用的IDE之一,不仅兼容性好,而且功能也相当丰富,比如调试.语法高亮.智能提示等等功能,它还支持web开发框架比如Django等,当你熟悉了它之后,开发效率是相当 ...

  2. 用python画哆啦a梦的身体_每天一个Python小技巧,用Python 画个多啦A梦,小猪佩奇,文末还有Python入门学习视频...

    见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库. 其实主要用的库就一个 turtle 库 先说明一下turtle绘图的基础知识: 1. 画布(canvas) ...

  3. python turtle绕原点旋转_每天一个Python小技巧,用Python 画个多啦A梦,小猪佩奇,文末还有Python入门学习视频

    见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库. 其实主要用的库就一个 turtle 库 先说明一下turtle绘图的基础知识: 1. 画布(canvas) ...

  4. python炫酷动画源代码_Python小技巧:如何用Python代码发一个炫酷的朋友圈

    相信很多朋友在发朋友圈的时候,都会发一些话语,有些还会配一张图,但是普通的配图怎么符合我们程序员的身份呢?发出去都觉得没牌面,应该整点技术性的活. 今天给大家带来一个项目,这个小项目只用50行代码就能 ...

  5. 用python画微信捂脸_懒人小技巧 (1):python 实现 IPA 上传到蒲公英

    一.为什么要做这件事 在测试过程中,ios app的安装包(.IPA文件)不像安卓的apk文件那样直接放到手机里点击安装即可,一般来说可以通过一下几种来方式来安装: xcode安装到收集中(点击win ...

  6. python 视频加字幕_【小技巧】用Python给你的视频添加字幕

    本文建议阅读时间 8 min 在平常调试代码时,需要对视频添加一些文字说明,下面使用 Python 的 OpenCV 和 PIL 对一个视频进行添加文字. 对于加在视频中的文字的字体是可以根据喜好选择 ...

  7. 使用python调用minitab_Minitab小技巧: 解决Python错误的快速提示

    会审视当前及过往的数据,以找出趋势并预测规律.发现变量之间隐藏的关系.可视化数据交互作用并识别重要因素,从而解答最棘手的问题.应对最严峻的难题. Minitab的Python连接功能允许用户从Mini ...

  8. 每日小技巧,用python给喜欢的主播自动发弹幕

    文章目录 写在前面 实现步骤 写在前面 发弹幕只是其中一个小小的功能,还可以自动点赞.收藏.投币.自动播放.私信等等,但是我们只演示这个,其它的不做展示. 实现步骤 先打开一个视频或者直播,F12打开 ...

  9. 教你1个转换小技巧,免费多张jpg合并成pdf

    工作中我们为了多张图片方便查看,一般会将其合并成一个pdf,今天小编和大家分享一个快速处理的方法,每天都可以免费转换,无需下载软件,打开搜索引擎,直接输入软件名称搜索,马上就可以进入网站的首页,界面简 ...

最新文章

  1. c++ windows获得当前工作目录文件_基于linux下Python文件操作
  2. 3. SQL Server数据库状态监控 - 可用空间
  3. [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】
  4. MyBatis ofType和javaType区别
  5. string的内存管理问题
  6. python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals slots)
  7. 联想电脑的一键换机软件——乐换机
  8. CPU指令集是什么东西
  9. BZOJ-1875-HH去散步-SDOI2009-矩阵乘法
  10. C#中线程的使用[Thread in C#]
  11. c语言while可以改为when,控制流:if、when、for、while
  12. 实验二简化版C语言中文理解程序文法
  13. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图
  14. pythonfor循环语句例子_简单的python循环知识
  15. 一次ORACLE启动报错修复的记录
  16. JMeter Exception: java.net.BindException: Address already in use: connect(转)
  17. Mac中java实现自动打开软件问题
  18. 深刻理解Tensor的概念及其常见的操作_以Pytorch框架为例
  19. js判断是否是微信扫描进入
  20. iPad能装Android系统,我错了,原来iPad真的能装Windows和MacOS系统

热门文章

  1. java permgen space_PermGen space 与 Java heap space
  2. 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!
  3. 羊城杯2021-网络安全大赛部分writeup
  4. C++设计模式之原型模式(三)
  5. setevent/waitforsingleobject
  6. ORA-00911错误及解决方法
  7. Arduino 使用 摇杆模块
  8. Vue2进度条(Progress)
  9. Gateway worker配置同时支持wss和ws协议
  10. CUDA C 编程权威指南 Grossman 第9章 多GPU编程