python 自动发送邮件

    对于工作中,如果每日需要发送具有规律性的邮件,采用python自动发送可以节约很多时间,提高效率。本文主要以腾讯企业邮箱为例,介绍python自动发送邮件(含附件)的功能。为保护隐私,代码中的邮箱及授权码已替换,测试使用时更换为实际邮箱和授权码即可。

1. 获取授权码

  授权码类似于密码,每家邮箱几乎都有,本文以腾讯企业邮箱为例,对应授权码在设置-账户设置的目录下,对应开通协议后即可过的授权码。

2. 源代码

  本章节主要介绍不含附件,即纯文本的邮件发送,主要的步骤如下:

1. 传入邮箱账号和密码,进行登录

2. 传入邮件标题和内容,以及附件(没有可以不写)

3. 传入收件人邮箱,发送邮件

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.application import MIMEApplication
import os
import datetimeclass Send_Eamil(object):def __init__(self, mailbox, pwd, addressee, title, text, attachments=None):self.email_host = "smtp.exmail.qq.com"  # 发送邮件的服务器,此处以腾讯企业邮箱为例self.email_user = mailbox  # 发送者的邮箱self.email_pwd = pwd  # 授权码self.email_port = 465  # 服务器SSL端口号,默认是465self.addressee = addressee  # 收件人邮箱,格式为列表self.title = title  # 邮件标题self.text = text  # 邮件正文内容self.attachments = attachments  # 附件,格式为列表,对应添加绝对路径的文件名returndef log_in(self):# 登录邮箱,并检验是否成功smtpSSL = smtplib.SMTP_SSL(self.email_host, self.email_port)  # 创建SSL对象loginRes = smtpSSL.login(self.email_user, self.email_pwd)  # 输入账号和授权码,进行登录log_code = loginRes[0]  # 登录对应返回的编码,235表示成功if log_code == 235:print('登录邮箱成功!')return smtpSSLelse:print('登录邮箱失败,报错编码:', log_code)os._exit(0)def write_email(self):# 创建邮件,并写入信息mail = MIMEMultipart()  # 创建邮件mail['From'] = Header(self.email_user, 'utf-8')  # 发件人mail['To'] = Header(",".join(self.addressee), 'utf-8')  # 收件人列表mail['Subject'] = Header(self.title, 'utf-8')  # 邮件标题mail.attach(MIMEText(self.text, 'plain', 'utf-8'))  # 邮件正文内容# 添加附件,若没有则不添加if self.attachments == None:passelse:# 循环读取附件并添加for num in range(len(self.attachments)):document = self.attachments[num]try:document_name = document.split('/')[-1]  # 剔除绝对路径后的文件名except:document_name = '附件' + str(num + 1) + documentone_doc = MIMEApplication(open(document, 'rb').read())  # 读取附件one_doc['Content-Type'] = 'application/octet-stream'  # 设置格式# 添加附件标题one_doc.add_header('Content-Disposition', 'attachment', filename=document_name)mail.attach(one_doc)return maildef send(self):# 发送邮件mail = Send_Eamil.write_email(self)smtpSSL = Send_Eamil.log_in(self)try:smtpSSL.sendmail(self.email_user, self.addressee, mail.as_string())print('邮件发送成功')except Exception as e:print('邮件发送失败,报错为:',e)if __name__ == '__main__':today = datetime.date.today().strftime("%Y%m%d")title = today+'业绩报告'text = today + 'xxx产品涨跌幅为:{},xx指数涨跌幅为:{},跑赢指数:{}'.format('1%','0.5%','0.5%')mailbox = "send.cn"pwd = "password"addressee = ["adr.cn"]Send_Eamil(mailbox, pwd, addressee, title, text).send()

  对应测试的结果如下:

3. 功能优化

   在需要增加附件的情况下,可以将所需要的附件都放在一个文件夹中,自动读取,然后加入邮件中发送。

     构建函数,读取上述文件夹下的文件,并保存为列表,其中的文件格式为‘绝对路径+文件名’ ,例如:‘D/桌面/附件/表格.xlsx’。函数的代码如下:

def get_attachments(file_Path):# 获取附件attachment_list = []for i, j, doc_list in os.walk(file_Path):for doc in doc_list:attachment_list.append(file_path + doc)return attachment_listif __name__ == '__main__':file_path = 'C:/xx/xxx/Desktop/附件/'attachments = get_attachments(file_path)today = datetime.date.today().strftime("%Y%m%d")title = today + '业绩报告'text = today + 'xxx产品涨跌幅为:{},xx指数涨跌幅为:{},跑赢指数:{}'.format('1%', '0.5%', '0.5%')mailbox = "send.cn"pwd = "password"addressee = ["adr.cn", "adr1.cn"]Send_Eamil(mailbox, pwd, addressee, title, text, attachments).send()

  发送后的结果为:

4. 完全自动化

   发送邮件的问题解决了,但是每次发送时,都需要run一次代码。为了避免忘记,可以采取定时任务+启动脚本的方式,来自动发送邮件,这种情况下,只需要每日更新一下发送的内容即可(如果内容是固定格式,可以考虑使用自动生成的思路)。

 启动脚本的创建:新建一个txt文本,输入一下内容,再将脚本名称后缀改为“.bat”即可。

关于脚本的创建和定时任务网上资料非常多,这里也就不再进一步叙述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Edge调用Aria2下载

一、准备工作 1、Edge浏览器:Windows系统自带或点击下载;   2、Aria2 gui:点击github下载或自行搜索下载其他版本; 二、启动Aria2 gui 解压下载的Aria2 gui到任意目录,点击“Aria2c启动器”或“AriaNg启动器”皆可。…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《“无废”电–氢充能服务区多源微网优化运行模型》

这个文章标题涉及到“无废”电–氢充能服务区、多源微网和优化运行模型。下面我将对标题中的关键术语进行解读: “无废”电–氢充能服务区: 无废电(Waste-free electricity): 这可能指的是通过某种方式生产的电力&…

从零开始学习 JS APL(六):完整指南和实例解析

学习目标: 1. 能够利用正则表达式校验输入信息的合法性 2. 具备利用正则表达式验证小兔鲜注册页面表单的能力 学习内容: 正则表达式 综合案例 阶段案例 学习时间: 周一至周五晚上 7 点—晚上9点周六上午 9 点-上午 11 点周日下午 3 点-下…

短视频系统设计:如何支持三千万用户同时在线看视频?

Java全能学习面试指南:https://javaxiaobear.cn 短视频(short video)通常时长在 15 分钟以内,主要是在移动智能终端上进行拍摄、美化编辑或加特效,并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时…

简单地将附件POST到Notes应用中

大家好,才是真的好。 这半年我们会讲很多开发知识,这篇紧接上篇《通过URL将HTML表单数据创建到Domino应用中》,讲述如何将附件POST到Note应用中。 原理是一样,首先,你得有一个表单,我们用html写一个&…

Android 缩减、混淆处理和优化应用

为了尽可能减小应用的大小,您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后,您还会受益于两项功能,一项是混淆处理功能,该功能会缩短应用的类和成员的名称;另一项是优化功能,该功…

云HIS:新一代云架构医院信息管理系统源码(java语言)

云HIS信息管理云平台,提供全方位的临床系统应用,是国内领先的以云计算为基础,以云计算赋能医疗机构,是颠覆传统医疗信息化业态的技术与模式创新,以SaaS方式,为医疗机构提供信息系统服务,满足从医…

Deep Learning(wu--84)调参、正则化、优化--改进深度神经网络

文章目录 2偏差和方差正则化梯度消失\爆炸权重初始化导数计算梯度检验OptimizationMini-Batch 梯度下降法指数加权平均偏差修正RMSpropAdam学习率衰减局部最优问题 调参BNsoftmax framework 2 偏差和方差 唔,这部分在机器学习里讲的更好点 训练集误差大&#xff…

【生信分析】基因组学导论

由于工作需要,现在开始跨行学生信! 祝我成功 目标:通过一周的学习能对对不同高通量测序数据集(RNA-seq、ChIP-seq、BS-seq 和多组学集成)进行分析。 配置环境 if (!requireNamespace("BiocManager", quiet…

C语言能判断一个变量是int还是float吗?

C语言能判断一个变量是int还是float吗? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C语言从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!&…

初识消息队列

1、消息 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 2、消息队列 消息队列(Message Queue)是一种应用间的通信方式&#…

学生档案管理系统研究

摘 要 学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低…

Ant Design正式推出企业级设计体系,抢先了解!

企业级产品设计体系AntDesign是蚂蚁集团体经过大量项目实践和总结,逐步打磨出的产品。随着这两年B端产品的逐渐白热化,越来越多的用户对更好的用户体验有了进一步的要求。 作为专门为国内生产研究团队量身定制的在线协作工具,设计师可以直接在…

Kubernetes(K8s)DashBoard的使用-11

DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实,为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。用户可以使用Dashboard部署容器化的应用,还可以…

【EI会议征稿中】第三届光学与机器视觉国际学术会议(ICOMV 2024)

第三届光学与机器视觉国际学术会议(ICOMV 2024) 2024 3rd International Conference on Optics and Machine Vision 第三届光学与机器视觉国际学术会议(ICOMV 2024)将于2024年1月19-21日在中国南昌举行。本次会议将围绕“光学”与"机器视觉”等研究领域展开讨论&#xf…

群晖Docker搭建HomeAssistant,结合内网穿透实现远程访问智能家居控制中心

使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant并实现异地公网访问一、下载HomeAssistant镜像二、内网穿透HomeAssistant,实现异地控制智能家居三、使用固定域名访问HomeAssistant HomeAssistant是一个可以控制 苹果…

java8 升级 java11

1.安装java11 1.1 安装参考 ​​​​​​LINUX安装JDK_liunx上安装ocean-CSDN博客 1.2 检查 java -version 2.Maven 项目pom文件修改 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEnc…

外包干了一个月,技术明显进步。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了3年的功能测试…

论文阅读 - VGAER: Graph Neural Network Reconstruction based Community Detection

https://arxiv.org/pdf/2201.04066.pdf 社群检测是网络科学中一个基础而重要的问题&#xff0c;但基于图神经网络的社群检测算法为数不多&#xff0c;其中无监督算法几乎是空白。 本文通过将高阶模块化信息与网络特征融合&#xff0c;首次提出了基于变异图自动编码器重构的社群…