yek2furw 发表于 2020-12-1 13:37

领导让每天发工作报告到邮箱so: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# 月份
    day = curtime# 日
    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权限

使用宝塔面板定时运行

没有发现宝塔自定义工作日定时,单休{: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看视频 替换成预设工作内容{:1_925:}

eoo 发表于 2020-12-1 14:29

大佬牛逼 class
页: [1] 2
查看完整版本: 领导让每天发工作报告到邮箱so:python自动写工作报告发邮箱