定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下

整个链路:传感器采集端采集数据,边缘端上传数据库,从数据库拿到数据。

产品端有个自动出报告的需求,并且希望自动出的报告可以定时通过邮件发到指定邮箱中。

自动发邮件中也有较多坑,本文特此记录自动发邮件中的坑。

使用:Python3.7,win10系统,163邮箱作为发邮件方,QQ邮箱作为收邮件方。

**第一步:**申请两个账号分别作为发送和接收的账号,本文用的是一个163邮箱,一个是qq邮箱。

2737996477a6c8c7b4a5ac88875ddda5.png

第一个坑需要注意了,上图是qq邮箱中的邮箱设置,需要在账户中开启POP3/SMTP服务(一定要开启,不然即使Python中的代码都是对的,也不能正常发送邮件,因为Python中发邮件用的是SMTP的邮件传输协议包),这里还有一个坑需要注意的是:如果你把这个邮箱当作是发送邮件的一方,还需要记住授权码,因为Python中邮箱的登录是用授权码的而不是密码。

0570595d7a7791ff06bd9eedfc0cd86b.png

在163邮箱中的设置中也将POP3/SMTP服务打开。

20bd6634ef7c5833558014e7d2e0b3e6.png

6b30109962e978ffb0cddf94e6dca5cd.png

开启SMTP服务后,一定要记住授权码

**第二步:**Python编写程序

#发送邮件模块

import smtplib

#写邮件模块

import email

#定义邮件类型及内容

"""

邮件体为多组件类型(如果不是单一发送文本或者图片或者附件,那么就需要这个多组件类型将

其它元素打包进来)

"""

from email.mime.multipart import MIMEMultipart

#邮件中的文本信息

from email.mime.text import MIMEText

#邮件中的图片信息

from email.mime.image import MIMEImage

#定义邮件标题

from email.header import Header

#################################################################################################

#设置服务器所需信息

#邮件发送方邮箱地址

sender='写发送方邮箱地址,这里只是示意一下@163.com'

#这个是163邮箱里面POP3/SMTP开启后的授权码,一定注意不是163邮箱的登录密码

#第一次做的时候设置成邮箱登录密码反而邮件不能发送,改成授权码之后才可以

password='这里写授权码,注意不是邮箱登录密码,授权码一般是由随机的16位字母组成'

#邮件接收方邮箱地址,注意需要[]包裹,这意味着你可以写多个邮件地址群发

receivers=['写接收方邮箱地址,这里只是示意一下@qq.com']

###############################################################################################

#邮件基本信息输入

#设置总的邮件体对象,对象类型为mixed

mix_part=MIMEMultipart('mixed')

#发送者邮箱地址

mix_part['From']='写发送方邮箱地址,这里只是示意一下@163.com'

#接收者邮箱地址

mix_part['To']='写接收方邮箱地址,这里只是示意一下@qq.com'

#邮件标题

subject='2020-5-21测试报告'

mix_part['subject']=Header(subject,'utf-8')

#################################################################################################

#构造文本内容,也就是邮件中正文部分的内容

"""

三个参数:

第一个为文本内容,第二个plain设置文本格式,第三个utf-8设置编码

"""

message_info='python邮件发送测试'

message=MIMEText(message_info,'plain','utf-8')

#通过多组件类型将文本内容打包进来

mix_part.attach(message)

###############################################################################################

#邮件中附件文本的构造

#设置附件文本的路径,除了改路径,其它几行代码基本不需要改动

txt_path=r'C:\Users\Desktop\测试文件.pdf'

txt_file = open(txt_path, 'rb').read()

txt = MIMEText(txt_file, 'base64', 'utf-8')

txt["Content-Type"] = 'application/octet-stream'

# 命名发送的附件名称

txt.add_header('Content-Disposition', 'attachment', filename='测试报告.pdf')

#通过多组件类型将文本附件打包进来

mix_part.attach(txt)

####################################################################################

# 邮件中图片附件的构造

#设置附件图片的路径,除了改路径,其它几行代码基本不需要改动

image_path=r'C:\Users\Desktop\images\test.png'

image_file = open(image_path, 'rb').read()

image = MIMEImage(image_file)

image.add_header('Content-ID', '')

#filename需要改成上传的图片名称

image["Content-Disposition"] = 'attachment; filename="test.png"'

#通过多组件类型将图片附件打包进来

mix_part.attach(image)

###################################################################################################

try:

"""

qq邮箱服务器地址的设置,如果是用qq邮箱发邮件则需要设置,

本文是用163邮箱发邮件,所以只需要设置163邮箱服务器地址即可

"""

# smtpObj=smtplib.SMTP('smtp.exmail.qq.com')

#163邮箱服务器地址的设置

smtpObj = smtplib.SMTP('smtp.163.com')

#登录:账号,密码

smtpObj.login(sender,password)

smtpObj.sendmail(sender,receivers,mix_part.as_string())

smtpObj.quit()

print('邮件发送成功')

except smtplib.SMTPException:

print('Error:无法发送邮件')

第三步:电脑设置定时发送邮件

win+r调出运行窗口输入taskschd.msc

b29d3b4eaa1abaf5436abe8dda5bd1f5.png

创建基本任务,然后按照提示一步步点下去即可

6f24067caf8b8b393f25d0b710ac5e3a.png

按照自己的需求,我这里选择的是一次,然后设置启动程序的未来时间即可

aec2f69aeb9d6057663395f6ea94441c.png

58cde771f9150adf66285a331f1c19c2.png

ec034443ebfeab879b657ab9cc2a6890.png

程序或脚本一栏不需要改变,起始于(可选)指的是Python的路径,添加参数(可选)指的是刚才编好的自动发邮件程序的路径。

4ae657f4093cafa8966f8c61155347c6.png

点击完成即可。

总结如下:

(1)需要将发邮件和接收邮件邮箱设置中的SMTP服务打开,并记住授权码

(2)Python编写程序按步骤一步步来,应该没有啥问题

(3)电脑中设置自动运行程序时,需要注意设置的起始于(可选)以及添加参数(可选)的路径

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

相关文章

使用Guava的AbstractInvocationHandler正确完成代理

不太经常,但有时我们被迫使用java.lang.reflect.Proxy编写自定义动态代理类 。 这种机制的确没有魔力,而且即使您永远不会真正使用它,也值得知道-因为Java代理在各种框架和库中无处不在。 这个想法很简单:动态创建一个实现一个或…

php异常处理机制

转自:https://www.cnblogs.com/water0729/p/5802476.html php异常我们常接触到的就是error错误码1,warning错误码2,notice错误码8这三类。出现error了系统是挂掉了,但是warning和notice是我们可以捕捉并处理的 php配置项display_e…

JavaScript 事件处理详解

事件绑定与解绑: el.onEventName function (){} document.getElementById("dom").onclick function(){ } //绑定事件 document.getElementById("dom").onclick null; //移除绑定 dom0级事件,也就是最早期js处理事…

webbrowser设置横向打印_C# 日常记录:指定打印机/纸张/纸盒(静默打印)(不弹窗打印)WinForm篇...

我在WinForm 编程时一直有一个困扰很久的问题,有很多时候我们需要静默打印 或者不想使用默认的UI 进行打印设置 这个时候我的想法如下 1. 获取全部打印机 2.获取打印机能打什么样的纸3.将打印机设置传入并打印首选用到的打印机设置类System.Drawing.Printing.Printe…

mysql异步非阻塞方式_如何理解swoole异步非阻塞?

传统的apache2handler或php-fpm本质上都是短生命周期(请求后释放资源)的FastCGI运行模式. 请求来了,master进程会调用worker进程来处理,处理完后释放资源. 假设你在functions.php里定义了1000个函数,那么每次请求,都要重新定义一次,有一定的性能损失. 好处则是修改保存代码后,下…

IDEA中使用Maven

Maven的安装与使用 安装 1、下载,官网下载。 2、解压,存放路径中不可包含空格和中文。如:"E:\dev\workspace\maven\apache-maven-3.6.0" 3、配置本地仓库,进入 "conf/settings.xml" 中,在 setting…

Java应用程序中的内存泄漏和内存管理

Java平台最突出的功能之一是其自动内存管理。 许多人错误地将此功能转换为Java中没有内存泄漏 。 但是,事实并非如此,我给人的印象是,现代Java框架和基于Java的平台,尤其是Android平台,越来越与这种错误的假设相矛盾。…

js (jQuery)分组数据

function getobjArr (data) {var result [];data.HELMET.system 系统分类// console.log(data)$.each(data.HELMET, function (index_h, elem_h) {var h {id: index_h,name: elem_h,Projects: []}$(data.sonProjects).each(function (index_p, elem_p) {elem_p.AppCategory…

【前端组件】

下拉列表:https://harvesthq.github.io/chosen/#optgroup-support转载于:https://www.cnblogs.com/helww/p/9718396.html

python后台开发知识点_面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记...

文章每周持续更新,各位的「三连」是对我最大的肯定。可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇)文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工作忙断断续续整理了半个月&#xf…

python用turtle画彩虹_Python利用turtle库绘制彩虹代码示例

语言:PythonIDE:Python.IDE需求做出彩虹效果颜色空间RGB模型:光的三原色,共同决定色相HSB/HSV模型:H色彩,S深浅,B饱和度,H决定色相需要将HSB模型转换为RGB模型代码示例:#…

MongoDB事实:商品硬件上每秒插入80000次以上

在尝试一些时间序列集合时,我需要一个大数据集来检查我们的聚合查询在增加数据负载的情况下不会成为瓶颈。 我们解决了5000万份文档,因为超出此数目我们仍然会考虑分片。 每次事件如下所示: {"_id" : ObjectId("5298a5a03b3…

scala-jdbc-scalike操作jdbc数据库

1, 引入maven依赖 <!-- 使用 sclaikeJDBC --><dependency><groupId>org.scalikejdbc</groupId><artifactId>scalikejdbc_2.11</artifactId><version>3.3.1</version></dependency><dependency><groupId>org…

day 17python 面对对象之继承

一&#xff1a;什么面向对象的继承&#xff1f; 比较官方的说法就是&#xff1a; 继承&#xff08;英语&#xff1a;inheritance&#xff09;是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B&#xff0c;就把这个A称为“B的子类别”&#xff0c;而把B称…

js 人民币小写金额转换为大写

function smalltoBIG(n) {var fraction [角, 分];var digit [零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖];var unit [[元, 万, 亿],[, 拾, 佰, 仟]];var head n < 0 ? 欠 : ;n Math.abs(n);var s ;for (var i 0; i < fraction.length; i ) {s (digit[Math.floor…

mybatis源码_Mybatis源码之SqlSession

SqlSession简介Mybatis是一个强大的ORM框架&#xff0c;它通过接口式编程为开发者屏蔽了传统JDBC的诸多不便&#xff0c;以简单的方式提供强大的扩展能力。其中的接口式编程就是指日常使用的Mapper接口&#xff0c;Mybatis借助动态代理实现了sql语句与Mapper的接口的动态绑定&a…

r语言kmodes_聚类分析——k-means算法及R语言实现

我们知道『物以类聚&#xff0c;人以群分』&#xff0c;这里并不是分类问题&#xff0c;而是聚类问题。两者主要区别在于&#xff0c;分类是将一组数据根据不同的类区分&#xff0c;已经知道有哪些类&#xff0c;也就是数据已经有了类的标签。而聚类是一种事先不知道有多少类&a…

VSCode安装jshint插件报错

Mac电脑上使用VSCode安装jshint插件时提示如下错误&#xff1a; Failed to load jshint library. Please install jshint in your workspace folder using npm install jshint or globally using npm install -g jshint and then press Retry. 按照提示&#xff0c;使用np…

按小时分组mysql 补齐_分组记录按小时或按天白天和mysql的

生成单列dates_hours表&#xff0c;该表包含在合理范围内(例如从1900到2200)的所有日期和小时数。 然后从此表执行LEFT JOIN到您当前的查询。对于这种技术要正确执行&#xff0c;你可能需要对索引列添加到您的表&#xff0c;它包含转换后的时间戳(你copied_timestamp转换为DATE…

项目学生:Spring数据的持久性

这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client&#xff0c;带有Jersey的 Webservice Server和业务层 。 RESTful webapp onion的最后一层是持久层。 持久层有两种哲学。 一个阵营将数据库视为一个简单的存储&#xff0c;并希望保持这一层非常薄。…