python script 任务完成发送邮件提醒

最近有一个需求:运行一个程序,但是运行时间很长,需要时不时看看有没有结束了。

于是修改了之前写的脚本,实现了下面的一段玩具代码,有需要供参考。

最新版本放在:https://gist.github.com/thinkycx/2d67f8684210f854511d6d534e02e7a6

#!/usr/bin/env python
# coding=utf-8
# author: thinkycx
# date: 20180430
"""
purpose:
    send your an email after finish the job
    notice that qq smtp cannot send emails frequently, about 2 times per 10 minutes.
    and it's enough!
usage: 
    0. alias pynotice="python ~/scripts/pynotice.py"
    1. pynotice echo 123  # command should not have '  or " 
        or
    2. pynotice ./start.sh  
        start.sh content -> python -c "import time;time.sleep(10)"
    #[DEL] 3. nohup pynotice COMMAND >> pynotice-log.txt & 
"""
import multiprocessing
import os 
import sys
import time
import smtplib
from email import encoders
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import parseaddr, formataddr

sender = '10000@qq.com'
receiver = [ '10000@qq.com']
subject = {}
subject['from'] = ':)'
subject['to'] = ':)'
subject['subject'] = 'jobs done'
smtpserver = 'smtp.qq.com'
smtpport = '587'
username = '10000@qq.com'
password = '16-token' # get from your qq mail settings
log_name = "pynotice-log.txt"


def start():
    command = ' '
    command = command.join(sys.argv[1:]) # command is before > or  >>
    print "[*] command # ", command # command should not have  " or ' 
    os.system(command) 


def _format_addr(s):
    #如果包含中文,需要通过Header对象进行编码。Header对象编码的文本,包含utf-8编码信息和Base64编码的文本
    name, addr = parseaddr(s)
    return formataddr(( \
        Header(name, 'utf-8').encode(), \
        addr.encode('utf-8') if isinstance(addr, unicode) else addr))


def sendemail():
    command = ' '
    command = command.join(sys.argv[1:]) # join nb!
    content = "[*] %s jobs done!i\r\n" % command 
    # if os.path.exists(log_name):
    # 	with open(log_name,'r+') as f:
    #     	content += f.read()

    msg_text = MIMEText(content, 'html', 'utf-8')  # 中文需参数‘utf-8’,单字节字符不需要
    msg = MIMEMultipart()
    msg['From'] = _format_addr(u'%s<%s>' % (subject['from'], sender))
    msg['To'] = _format_addr(u'%s<%s>' % (subject['to'], receiver))
    msg['Subject'] = Header(u'%s' % subject['subject'], 'utf-8').encode()
    msg.attach(msg_text)

    smtp = smtplib.SMTP()
    # smtp.set_debuglevel(1)
    smtp.connect(smtpserver, smtpport)
    smtp.starttls()  #ssl加密
    time.sleep(1)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

if __name__ == "__main__":
    start_time = time.time()
    proc = multiprocessing.Process(target=start )
    proc.deamon = True
    proc.start()
    proc.join()
    print "[*] total time # ", time.time() - start_time
    sendemail()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值