当前位置:首页 > 技术文章 > 正文内容

简化日常工作系列之四 ---- 定时发送带附件的工作汇报邮件

arlanguage2个月前 (03-20)技术文章12

很久没有更新博客了,从6月初开始接手了公司项目组的管理工作,一直忙于各种开发计划和统筹安排,手里也积攒了一些实践。 简化日常工作其中有一项是给相关工作伙伴或者上级发送每日(或每周)工作情况汇报的邮件,这是一个略微让人很烦躁的工作,你得输入对方邮箱地址,添加相关附件,然后发送。实际上我们可以用脚本去完成这些任务,每当接近下班的时候,定时发送附件邮件。我以python为实现语言,写了一个基本的脚本。

不多说,show the code:

# -*- coding: utf-8 -*-
import smtplib
import email.MIMEMultipart# import MIMEMultipart
import email.MIMEText# import MIMEText
import email.MIMEBase# import MIMEBase
import os.path
import mimetypes
import time

From = "fffs@sss.com"
To = "xxx@163.com"
dateStr = time.strftime("%Y-%m-%d", time.localtime(time.time))
file_name = "C:\Users\Thinkpad\Desktop\dailyFiles" + "\\" + dateStr + "\work.txt"
print file_name


server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
server.login(From,"xxx") #仅smtp服务器需要验证时

# 构造MIMEMultipart对象做为根容器
main_msg = email.MIMEMultipart.MIMEMultipart

# 判断是否是空内容
file_context = open(file_name).read.strip
if (file_context == 'today work is:'):
    # 相当于内容为空,给自己发一份提示邮件
    text_msg = email.MIMEText.MIMEText("你今日的工作情况还未做记录,请检查后手动运行该脚本发送邮件。",_charset="utf-8")
    main_msg.attach(text_msg)
    main_msg['From'] = From
    main_msg['To'] = From
    main_msg['Subject'] = "今日工作汇报发送失败"
    main_msg['Date'] = email.Utils.formatdate
    # 得到格式化后的完整文本
    fullText = main_msg.as_string
    # 用smtp发送邮件
    try:
        server.sendmail(From, From, fullText)
    finally:
        print 'success!'
        server.quit

    print u"你今日的工作情况还未做记录,请检查后手动运行该脚本发送邮件。"
    exit


# 构造MIMEText对象做为邮件显示内容并附加到根容器
text_msg = email.MIMEText.MIMEText("你好,今日的工作情况见附件",_charset="utf-8")
main_msg.attach(text_msg)

# 构造MIMEBase对象做为文件附件内容并附加到根容器

## 读入文件内容并格式化 
data = open(file_name, 'rb')
ctype,encoding = mimetypes.guess_type(file_name)
if ctype is None or encoding is not None:
    ctype = 'application/octet-stream'
maintype,subtype = ctype.split('/',1)
file_msg = email.MIMEBase.MIMEBase(maintype, subtype)
file_msg.set_payload(data.read)
data.close
email.Encoders.encode_base64(file_msg)#把附件编码

## 设置附件头
basename = os.path.basename(file_name)
file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头
main_msg.attach(file_msg)

# 设置正文内容
# # 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = "今日工作汇报"
main_msg['Date'] = email.Utils.formatdate

# 得到格式化后的完整文本
fullText = main_msg.as_string

# 用smtp发送邮件
try:
    server.sendmail(From, To, fullText)
finally:
    print 'success!'
    server.quit

简单讲就是利用stmp服务,把之前博客里讲的每日生成的工作日志以附件形式添加到邮件里(
http://www.cnblogs.com/freephp/p/5148320.html),邮件里的正文一般也是固定的内容或者格式,这也是可以用脚本定时发送的原因。我们只需在固定的文本文件(就是附件文件)里写我们的工作情况即可。在程序最开头的地方我有去判断是否附件里没有写内容,若因为忘记写内容而直接发送出去会比较囧,所以加以判断,无内容则用邮件方式给自己邮箱发送一封提示邮件,督促自己补上内容,再手动run一下这个脚本吧。

当然有人会提出一个问题:干嘛不封装成类?

答:对于这样简单的功能,函数式的调用可读性更强。且功能不够多,封装优势不太明显。面向对象只是一种代码组装的方式,它从来不是在任何时候都是最佳选择。

其实很多自动化的实践都来源于实际工作,这个脚本我以应用到自己的项目组内,效果还不错。邮件不能完全代替及时的沟通,但它是一种正式和归纳的信息反馈。对于这样的交流方式,我更关注于内容,而不是花时间在繁琐地操作上。

对于这个小脚本我还可以深入思考关于邮件方面的是:

1.群发抄送联系人的功能也是很实用的,可以新增该功能。

2.对邮件内容的审核过滤,防止发生意外(侧漏)。

3.对邮箱中新增邮件进行的关键字遍历,这样不用每次一个一个去点,直接找到需要的功能。

4.自动回复邮件,对一些特定需回复的邮件,可以解析内容然后自动回复。

最后:

人生苦短,快用python.

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/3452.html

分享给朋友:

“简化日常工作系列之四 ---- 定时发送带附件的工作汇报邮件” 的相关文章

nginx服务的基本配置(nginx.conf文件的详解)

Nginx在运行时候,至少要加载几个核心模块和一个事件类模块。这些模块运行时所支持的配置项称为基本配置——所有其他模块执行时都依赖的配置项。由于配置项较多,所以把它们按照用户使用时的预期功能分成以下4类:1.用于调试、定位问题的配置项;2.正常运行的必备配置项;3.优化性能的配置项;4事件类配置项(...

Nginx 解决error.log和access.log日志的改善总结

1. 介绍自从了解了error和access日志的重要性,并且学会阅读相关log文档之后。通过调整nginx配置,解决error中的大量报错提示。通过过滤js等静态资源减少大量的access日志记录内容。同时,经过使用阿里云安全组封禁大量国外ip地址的访问。我的access.log文件和error....

解决php因为输出内容太短无法流式(Stream)输出问题

实测得知,如果用PHP做流式输出每次echo的内容太短的话,就没有流式的效果了,而是会等输出的长度达到一定时前端才能拿到结果,如下:这是我这边的测试结果,可见,这里仅接收到了两次流式输出,但是我在PHP里是输出了10次,从而证明了每次流式的内容达到一定长度时才能有流式得到效果,这个长度到底是多少,我...

nginx知识梳理及配置详解

nginx安装#nginx安装 yum -y install gcc pcre-devel openssl-devel #依赖包 useradd -s /sbin/nologin nginx ./configure --prefix=/usr/local/nginx #...

全网最新最全的Docker命令大集合,收藏备用!

Docker 是一个开源的平台,用于自动化应用程序的部署、扩展和管理。它使得开发者能够打包应用及其依赖项到一个轻量级的容器中,并在任何环境中快速运行。掌握 Docker 的常用命令可以大大提高你的工作效率,尤其是在开发、测试和部署阶段。本文将详细介绍 Docker 的常用命令,涵盖从基本操作到高级使...

高端Linux 脚本很有用,赶紧学起来!

Linux 脚本?准确的说叫 Linux Shell 脚本,Shell 脚本是一种被设计用来运行命令行解释器,他是 Linux 系统的一大特色之一。命令行是 Linux 系统中一种非常重要的交互方式,而它的实现基于 Linux 内核和 Shell 程序,为用户提供了强大和灵活的操作方式。使用 Lin...