1 | # python ./mail -s $server -f $from -t $to -u $user -p $pass -S “$subject” -m “${mail_msg}” -F $file |
源代码如下:
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 | # vim mail #!/usr/bin/python from email . MIMEText import MIMEText from email . MIMEMultipart import MIMEMultipart from email . MIMEBase import MIMEBase from email import Utils , Encoders import mimetypes , sys , smtplib , socket , getopt class SendMail : def __init__ ( self , smtp_server , from_addr , to_addr , user , passwd ) : self . mailserver = smtp_server self . from_addr = from_addr self . to_addr = to_addr self . username = user self . password = passwd def attachment ( self , filename ) : fd = open ( filename , ‘rb’ ) filename = filename . split ( ‘/’ ) mimetype , mimeencoding = mimetypes . guess_type ( filename [ – 1 ] ) if ( mimeencoding is None ) or ( mimetype is None ) : mimetype = ‘application/octet-stream’ maintype , subtype = mimetype . split ( ‘/’ ) if maintype == ‘text’ : retval = MIMEText ( fd . read ( ) , _subtype = subtype , _charset = ‘utf-8’ ) else : retval = MIMEBase ( maintype , subtype ) retval . set_payload ( fd . read ( ) ) Encoders . encode_base64 ( retval ) retval . add_header ( ‘Content-Disposition’ , ‘attachment’ , filename = filename [ – 1 ] ) fd . close ( ) return retval def msginfo ( self , msg , subject , filename ) : # message = “””Hello, ALL #This is test message. #–Anonymous””” message = msg msg = MIMEMultipart ( ) msg [ ‘To’ ] = self . to_addr msg [ ‘From’ ] = ‘sa <‘ + self . from_addr + ‘>’ msg [ ‘Date’ ] = Utils . formatdate ( localtime = 1 ) msg [ ‘Message-ID’ ] = Utils . make_msgid ( ) if subject : msg [ ‘Subject’ ] = subject if message : body = MIMEText ( message , _subtype = ‘plain’ ) msg . attach ( body ) #for filename in sys.argv[1:]: if filename : msg . attach ( self . attachment ( filename ) ) return msg . as_string ( ) def send ( self , msg = None , subject = None , filename = None ) : try : s = smtplib . SMTP ( self . mailserver ) try : s . login ( self . username , self . password ) except smtplib . SMTPException , e : print “Authentication failed:” , e sys . exit ( 1 ) s . sendmail ( self . from_addr , self . to_addr . split ( ‘,’ ) , self . msginfo ( msg , subject , filename ) ) except ( socket . gaierror , socket . error , socket . herror , smtplib . SMTPException ) , e : print “*** Your message may not have been sent!” print e sys . exit ( 2 ) else : print “Message successfully sent to %d recipient(s)” % len ( self . to_addr ) if __name__ == ‘__main__’ : def usage ( ) : print “””Useage:%s [-h] -s <SMTP Server> -f <FROM_ADDRESS> -t <TO_ADDRESS> -u <USER_NAME> -p <PASSWORD> [-S <MAIL_SUBJECT> -m <MAIL_MESSAGE> -F <ATTACHMENT>] Mandatory arguments to long options are mandatory for short options too. -f, –from= Sets the name of the “from” person (i.e., the envelope sender of the mail). -t, –to= Addressee’s address. -t “test@trustauth.cn,test1@trustauth.cn”. -u, –user= Login SMTP server username. -p, –pass= Login SMTP server password. -S, –subject= Mail subject. -m, –msg= Mail message.-m “msg, …….” -F, –file= Attachment file name. -h, –help Help documen. “”” % sys . argv [ 0 ] sys . exit ( 3 ) try : options , args = getopt . getopt ( sys . argv [ 1 : ] , “hs:f:t:u:p:S:m:F:” , “–help –server= –from= –to= –user= –pass= –subject= –msg= –file=” , ) except getopt . GetoptError : usage ( ) sys . exit ( 3 ) server = None from_addr = None to_addr = None username = None password = None subject = None filename = None msg = None for name , value in options : if name in ( “-h” , “–help” ) : usage ( ) if name in ( “-s” , “–server” ) : server = value if name in ( “-f” , “–from” ) : from_addr = value if name in ( “-t” , “–to” ) : to_addr = value if name in ( “-u” , “–user” ) : username = value if name in ( “-p” , “–pass” ) : password = value if name in ( “-S” , “–subject” ) : subject = value if name in ( “-m” , “–msg” ) : msg = value if name in ( “-F” , “–file” ) : filename = value if server and from_addr and to_addr and username and password : test = SendMail ( server , from_addr , to_addr , username , password ) test . send ( msg , subject , filename ) else : usage ( ) |
文章转载来自:trustauth.cn
上一篇:Python日常巡检程序(daily-check)
下一篇:GCC PGO让你的PHP7更快