上次的ruby考勤那个, 因为天天发邮件, 人事觉得烦, 刚好现在在折腾Python, 于是用这个重写了...


这个发邮件的, 可以发附件,图片... 记录一下


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/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  =  'test@163.com'  
   password  =  '123123'  
     
   msg  =  MIMEMultipart()  
   msg[ 'Subject' =  'Check_in'  
   msg[ 'From' =  "test@163.com"
   msg[ 'To' =  "me@163.com"
     
# attchment
   if  len (filename) >  0 :
     for  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  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  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  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)