上次的ruby考勤那个, 因为天天发邮件, 人事觉得烦, 刚好现在在折腾Python, 于是用这个重写了...
这个发邮件的, 可以发附件,图片... 记录一下
#!/usr/bin/python import datetime import MySQLdb import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage csv_str = 'datetime,name,start,over,hour\n' name = {1:"mei.han", 2:"xing.mei", 3:"you.yao", 6:"zing.ma", 9:"jing.cai"} csv_file = "/tmp/check_in.csv" def send_mail(filename=[], picname=[], content_txt='', content_html=''): smtpserver = 'smtp.163.com' username = '[email protected]' password = '123123' msg = MIMEMultipart() msg['Subject'] = 'Check_in' msg['From'] = "[email protected]" msg['To'] = "[email protected]" # attchment if len(filename) > 0: for i in filename: att = MIMEText(open(i, 'rb').read(), 'base64', 'gf2312') att["Content-Type"] = 'application/octet-stream' att["Content-Disposition"] = 'attachment; filename="%s"' % i.split('/')[-1] msg.attach(att) # attchment picture if len(picname) > 0 and content_html != '': for i in range(0,len(picname)): #content_html = '<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image%s"><br>good!' % i msg_content_html = MIMEText(content_html,'html','gb2312') msg.attach(msg_content_html) with open(picname[i], 'rb') as f: msgImage = MIMEImage(f.read()) msgImage.add_header('Content-ID', '<image%s>' % (i + 1)) msg.attach(msgImage) # content text if content_txt != '': msg_content_txt = MIMEText(content_txt,_subtype='plain',_charset='gb2312') msg.attach(msg_content_txt) # content html if content_html != '' and len(picname) == 0: msg_content_html = MIMEText(content_html,_subtype='html',_charset='gb2312') msg.attach(msg_content_html) smtp = smtplib.SMTP() smtp.connect('smtp.163.com') smtp.starttls() #ssl send smtp.login(username, password) smtp.sendmail(msg['From'], msg['To'], msg.as_string()) smtp.quit() def check_kq(kq_time): tmp_list = [] csv_tmp = '' work = False try: conn = MySQLdb.connect(host='192.168.2.2',user='kq',passwd='123123',db='test',port=3306) cur = conn.cursor() for i in name.keys(): max_time = kq_time + " 23:00:00" min_time = kq_time + " 06:00:00" cur.execute("select * from kqtime where userid=%s and time>\'%s\' and time<\'%s\'" % (i,min_time,max_time)) kqtime = cur.fetchall() for x,y,z in kqtime: #num, time, userid tmp_list.append(y) if len(tmp_list) == 0: csv_tmp = csv_tmp + ("%s,%s,,,0" % (kq_time,name[i])) + "\n" elif len(tmp_list) == 1: if int(tmp_list[0].strftime("%H")) < 12: csv_tmp = csv_tmp + ("%s,%s,%s,,0" % (kq_time,name[i],tmp_list[0].strftime("%H:%M:%S"))) + "\n" else: csv_tmp = csv_tmp + ("%s,%s,,%s,0" % (kq_time,name[i],tmp_list[0].strftime("%H:%M:%S"))) + "\n" work = True else: hour_str = str(max(tmp_list) - min(tmp_list)) hour = int(hour_str.split(':')[0]) sec = int(hour_str.split(':')[1]) if hour > 3: hour -= 1 if sec < 15: hour += 0.0 elif 15 <= sec < 45: hour += 0.5 elif sec >= 45: hour += 1.0 work = True csv_tmp = csv_tmp + ("%s,%s,%s,%s,%s" % (kq_time,name[i],min(tmp_list).strftime("%H:%M:%S"),max(tmp_list).strftime("%H:%M:%S"),hour)) + "\n" tmp_list = [] cur.close() conn.close() except: pass if work: return csv_tmp else: return '' for i in range(1,8)[::-1]: #一周分析一次 day_kq = check_kq((datetime.datetime.now() - datetime.timedelta(days=i)).strftime("%Y-%m-%d")) if day_kq != '': csv_str = csv_str + check_kq((datetime.datetime.now() - datetime.timedelta(days=i)).strftime("%Y-%m-%d")) + "\n" with open(csv_file, 'w') as f: f.write(csv_str) send_mail(filename=[csv_file], content_txt="Check_In") os.remove(csv_file)