吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2992|回复: 13
收起左侧

[Python 转载] 领导让每天发工作报告到邮箱so:python自动写工作报告发邮箱

[复制链接]
yek2furw 发表于 2020-12-1 13:37
刚学python,交流学习所以注释很全,如有不对请大神指正
[Python] 纯文本查看 复制代码
# python3运行,需自行安装python-docx模块包
# 导入模块
import datetime, smtplib, requests, time
from docx import Document
from docx.oxml.ns import qn
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart


# 定义新建word文档的类
class WorkWord(object):
    def __init__(self):
        self.document = Document()
        # 文档全局字体设置为‘宋体’
        self.document.styles['Normal'].font.name = u'宋体'
        self.document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')

    # 新建文件的标题为当天的日期
    def title(self, mon, day):
        self.document.add_heading(u'xxx%s月%s日工作报告' % (mon, day), 0)

    # 文档的内容
    def content(self):
        # 工作内容默认信息,
        # 也可用 1.def content(self, text='摸鱼\n\t看视频')调用,
        # 优点:可以导入参数 缺点:不利于返回数据推送酷推
        self.text = '摸鱼\n\t看视频'  # \n换行符 \t制表符 \r回车
        p = self.document.add_paragraph('')
        # 在段落后面追加文本,并可设置样式
        p.add_run(u'\n今日工作内容:\n').bold = True  # 字体加粗
        # p.add_run(' and some ') #默认字体样式
        # p.add_run('italic.').italic = True #字体倾斜
        p.add_run(u'\n\t%s' % self.text)

    # 保存word
    def save_word(self, mon, day):
        try:
            word_name = u'%s月%s.docx' % (mon, day)
            self.document.save(word_name)
            # 酷推,不需要可屏蔽
            cool_push('文件创建成功:%s\n内容:%s\nps:如内容不准确,请前往修改!' % (word_name, self.text))
            print('文件创建成功:%s' % word_name)
        except:
            word_name = None
            print('Error: 文件创建失败!')
        return word_name


# 定义邮箱
class MailWord(object):
    def __init__(self):
        """
        163邮箱:
        163邮箱smtp服务器
        pop: pop.163.com
        smtp: smtp.163.com
        QQ邮箱
        POP3:pop.qq.com
        SMTP:smtp.qq.com
        SMTP端口号:25

        QQ邮箱smtp服务器及端口
        接收邮件服务器:imap.qq.com,使用SSL,端口号993
        发送邮件服务器:smtp.qq.com,使用SSL,端口号465或587
        新浪邮箱
        新浪邮箱smtp服务器
        外发服务器:smtp.vip.sina.com
        收件服务器:pop3.vip.sina.com
        新浪免费邮件
        外发服务器:smtp.sina.com.cn
        收件服务器:pop3.sina.com.cn
        新浪免费邮箱
        POP3:pop.sina.com
        SMTP:smtp.sina.com
        SMTP端口号:25
        新浪VIP邮箱
        POP3:pop3.vip.sina.com
        SMTP:smtp.vip.sina.com
        SMTP端口号:25
        新浪企业邮箱
        POP3:pop.sina.com
        SMTP:smtp.sina.com
        SMTP端口号:25
        """
        self.sender = '77777777@qq.com'  # 发送来自
        self.receivers = ['88888888@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
        self.mail_host = "smtp.qq.com"
        self.mail_user = "" # 邮箱账号
        self.mail_key = "" # 自定义qq邮箱SMTP服务授权码

    def new_mail(self, mon, day):
        # 创建一个带附件的实例
        self.message = MIMEMultipart()
        self.message['From'] = Header("xxx", 'utf-8')  # 邮件来自xxx
        self.message['To'] = Header("xx总", 'utf-8')  # 邮件接收人xx总
        subject = 'xxx%s月%s日工作报告' % (mon, day)
        self.message['Subject'] = Header(subject, 'utf-8')  # 邮件主题

    def mail_text(self, word_name, day):
        # 邮件正文内容
        self.message.attach(MIMEText('', 'plain', 'utf-8'))

        # 构造附件,传送当前目录下的当日工作总结文件
        att1 = MIMEText(open('%s' % word_name, 'rb').read(), 'base64', 'utf-8')
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        # 如果内容含有中文需解码
        att1["Content-Disposition"] = 'attachment; filename=%s.docx' % day  # .encode("utf-8")
        self.message.attach(att1)

    # 发送邮件
    def send_mail(self):
        try:
            smtpObj = smtplib.SMTP()
            smtpObj.connect(self.mail_host, 25)  # 25 为 SMTP 端口号
            smtpObj.login(self.mail_user, self.mail_key)
            smtpObj.sendmail(self.sender, self.receivers, self.message.as_string())
            mail_info = "邮件发送成功"
            print(mail_info)
        except smtplib.SMTPException:
            mail_info = "Error: 无法发送邮件"
            print(mail_info)
        return mail_info


# 获取日期
def mon_day():
    curtime = datetime.datetime.now()
    curtime = str(curtime.strftime('%Y/%m/%d %H:%M:%S'))
    mon = curtime[5:7]  # 月份
    day = curtime[8:10]  # 日
    return mon, day

# 酷推
def cool_push(info):
    spkey = ''  # 酷推key
    cpurl1 = 'https://push.xuthus.cc/wx/' + spkey # wx:微信 send:QQ group:QQ群推送
    requests.post(cpurl1, info.encode('utf-8'))

# 主函数
def main():
    mon, day = mon_day()  # 获取日期
    word1 = WorkWord()  # 创建文档对象
    word1.title(mon, day)  # 文档标题传入日期
    word1.content()  # 文档内容,演示使用默认参数
    word_name = word1.save_word(mon, day)  # word保存名字传入日期
    # 判断word是否创建
    if word_name == None:
        # 创建失败 酷推推送
        cool_push('Error: 文件创建失败!')
    else:
        # 创建成功预留3分钟确认文档时间
        time.sleep(180)
        mail1 = MailWord()  # 创建邮件对象
        mail1.new_mail(mon, day)  # 新邮件标题传入日期
        mail1.mail_text(word_name, day)  # 邮件内容传入word文件名和日期
        mail_info = mail1.send_mail()  # 发送邮件
        cool_push(mail_info)  # 酷推推送


if __name__ == '__main__':
    main()

代码我放入服务器自建filerun网盘目录下,可在线修改文档内容
ps:需要chmod权限
微信截图_20201201133206.png
使用宝塔面板定时运行
微信截图_20201201133432.png
没有发现宝塔自定义工作日定时,单休{:1_937:} 只能设置6个定时

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yek2furw 发表于 2020-12-1 14:18
wchenfeng 发表于 2020-12-1 14:15
万一工作报告写得出错了     大佬不检查检查嘛

写好之后酷推把内容推到微信或者QQ上,检查无误3分钟后自动发送,有需要修改的再登录filerun修改一下文档
 楼主| yek2furw 发表于 2020-12-1 14:03
yunruifuzhu 发表于 2020-12-1 14:00
麻烦的不是 定时发送 而是 具体内容编不出来啊

是啊,可恨的是每天工作重复还让写工作报告,这种情况就适用了
yunruifuzhu 发表于 2020-12-1 14:00
麻烦的不是 定时发送 而是 具体内容编不出来啊
弗由 发表于 2020-12-1 14:12
大佬就是厉害。
wchenfeng 发表于 2020-12-1 14:15
万一工作报告写得出错了     大佬不检查检查嘛
XiaoBaizzZ 发表于 2020-12-1 14:18
牛逼,看看能好使不
吃土不忘剁手人 发表于 2020-12-1 14:19
厉害了,报告是自动生成的吗?
 楼主| yek2furw 发表于 2020-12-1 14:26
吃土不忘剁手人 发表于 2020-12-1 14:19
厉害了,报告是自动生成的吗?

把 摸鱼\n\t看视频 替换成预设工作内容
eoo 发表于 2020-12-1 14:29
大佬牛逼 class
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表