刚学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权限
使用宝塔面板定时运行
没有发现宝塔自定义工作日定时,单休{:1_937:} 只能设置6个定时 |