一個python的郵件發送腳本,自動,定時,可以附件發送,抄送,附有說明文件
#!/bin/env python-- coding: utf-8 --
import datetime import smtplib import os,sys from email.mime.text import MIMEText from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from optparse import OptionParser
EMAILHOME=sys.path[0]
sender name and password
sendername="" senderpass=""
list of all receiver (include cc-receiver)
receiverlist=[] receivertmplist=[] receivercctmplist=[]
get the username and pasword
no try catch here
def getUserAndPass(senderfile): upf=open(senderfile) username=upf.readline() password=upf.readline() upf.close() return (username.strip(os.linesep),password.strip(os.linesep))
get the receiver list
return the list with no ''
def getReceiverList(filename): lif=open(filename) li=lif.readlines() lif.close() for x in range(len(li)): li[x]=li[x].strip().strip(os.linesep) while '' in li: li.remove('') return (li)
get content of the mail
def getContent(filename): contenttmp='' if os.path.exists(filename): contentf=open(filename) contenttmp=contentf.read() contentf.close() return contenttmp
parameters process
parser = OptionParser()
parser.add_option('-s', '--sender', dest='sender', help='file for sender of the mail', default=None) parser.add_option('-r', '--receiver', dest='receiver', help='list file for receivers of the mail',default=None) parser.add_option('-p', '--cc', dest='cc', help='list file for receivers of carbon copy', default=None) parser.add_option('-t', '--title', dest='title', help='title of the email,string', default='Auto email') parser.add_option('-c', '--content', dest='content', help='content of the mail,must be a file',default=None) parser.add_option('-a', '--attach', dest='attach', help='attachment of the file',default=None) parser.add_option('-n', '--nameattach', dest='nameattach', help='name for attachment of the file',default=None) parser.add_option('-l', '--server', dest='server', help='log in to the server',default='smtp.163.com') parser.add_option('-i', '--info', dest='info', help='information of the content,string,but not file',default='Auto email') parser.add_option('-f', '--form', dest='form', help='form of the content,html or plain',default='plain')
(options, args) = parser.parse_args()
get sender infor
if not options.sender: if os.path.exists(EMAILHOME+r'/sender.list'): (sendername,senderpass)=getUserAndPass(EMAILHOME+r'/sender.list') if sendername.strip()=="" or senderpass.strip()=="": print "no sender!" exit(0) else: print "no sender!" exit(0) else: if os.path.exists(options.sender): (sendername,senderpass)=getUserAndPass(EMAILHOME+r'/sender.list') if sendername.strip()=="" or senderpass.strip()=="": print "no sender!" exit(0) else: print "the file for sender list does not exists!" exit(0)
get list of all receiver
if not options.receiver: if os.path.exists(EMAILHOME+r'/receiver.list') or os.path.exists(EMAILHOME+r'/receivercc.list'): if os.path.exists(EMAILHOME+r'/receiver.list'): receivertmplist= getReceiverList(EMAILHOME+r'/receiver.list') if os.path.exists(EMAILHOME+r'/receivercc.list'): receivercctmplist= getReceiverList(EMAILHOME+r'/receivercc.list') receiverlist=receivertmplist+receivercctmplist if len(receiverlist)==0: print "no receiver!" exit(0) else: print "no receiver list file!" exit(0) else: if os.path.exists(options.receiver) or os.path.exists(options.cc): if os.path.exists(options.receiver): receivertmplist= getReceiverList(options.receiver) if os.path.exists(options.cc): receivercctmplist= getReceiverList(options.cc) receiverlist=receivertmplist+receivercctmplist if len(receiverlist): print "no receiver from the list file!" exit(0) else: print "receiver list file does not exist!" exit(0)
if options.attach and not options.nameattach: print "give a name to the attachment!" exit(0)
make a mail
mailall=MIMEMultipart()
content of the mail
if options.content: mailcontent =getContent(options.content) mailall.attach(MIMEText(mailcontent,options.form,'utf-8')) elif options.info: mailcontent = str(options.info) mailall.attach(MIMEText(mailcontent,options.form,'utf-8'))
attachment of the mail
if options.attach: mailattach =getContent(options.attach) if mailattach !='': contype = 'application/octet-stream' maintype,subtype=contype.split('/',1) attfile=MIMEBase(maintype,subtype) attfile.set_payload(mailattach) attfile.add_header('Content-Disposition','attachment',options.nameattach) print "attach file prepared!" mailall.attach(attfile)
title,sender,receiver,cc-receiver,
mailall['Subject']=options.title mailall['From']=sendername mailall['To']=str(receivertmplist) if len(receivercctmplist) !=0: mailall['CC']=str(receivercctmplist)
get the text of mailall
fullmailtext=mailall.as_string() print "prepare fullmailtext ok." mailconnect = smtplib.SMTP(options.server) try: mailconnect.login(sendername,senderpass) except Exception,e: print "error when connect the smtpserver with the given username and password !" print e exit(0)
print "connect ok!"
try: mailconnect.sendmail(sendername, receiverlist, fullmailtext) except Exception,e: print "error while sending the email!" finally: mailconnect.quit()
print 'email to '+str(receiverlist)+' over.'
print '**'80</pre>
———————————————————————————————————————————————
說明:
mail.py使用方法:
1,本腳本同目錄下文件介紹:
sender.list:郵件發送者郵箱和密碼,第一行賬號(如example@example.com),第二行密碼(必須項,不能為空)
receiver.list:郵件接收者列表,每行一個收件人(如example@example.com)
receivercc.list:郵件抄送者列表,每行一個收件人(如example@example.com)
調用方法舉例1:
把發件人和收件人信息(sender.list和receiver.list)填好后,在mail.py所在目錄執行
python mail.py -s sender.list -r receiver.list
2,其它幫助信息獲得方法:
在mail.py所在目錄執行:python mail.py -h
顯示:
Options:
-h, --help show this help message and exit
-s SENDER, --sender=SENDER //配置本腳本發件人信息存放的文件的路徑 如 /tmp/tmp/list.list
file for sender of the mail
-r RECEIVER, --receiver=RECEIVER //配置本腳本收件人列表存放的文件的路徑 如 /tmp/tmp/list.list
list file for receivers of the mail
-p CC, --cc=CC list file for receivers of carbon copy //配置抄送收件人列表存放的文件的路徑 如 /tmp/tmp/list.list
-t TITLE, --title=TITLE //配置郵件的標題,字符串(不能有空格)
title of the email,string
-c CONTENT, --content=CONTENT //配置郵件的內容,文件路徑(和-i沖突時,-i參數無效)
content of the mail,must be a file
-a ATTACH, --attach=ATTACH //配置郵件的附件,文件路徑(有附件時,必須配置-n參數)
attachment of the file
-n NAMEATTACH, --nameattach=NAMEATTACH //配置郵件的附件名稱,字符串(不能有空格)(有附件時,必須配置本參數)
name for attachment of the file
-l SERVER, --server=SERVER //配置郵件的服務器,默認是smtp.163.com
log in to the server
-i INFO, --info=INFO information of the content,string,but not file //配置郵件的內容,字符串(不能有空格)(和-c沖突時,本參數無效)
-f FORM, --form=FORM form of the content,html or plain //配置郵件的內容的類型,默認是plain
調用方法舉例2:
在mail.py所在目錄執行:
python mail.py -s /root/tmp/sender.list -r /root/tmp/receiver.list -p /root/tmp/receivercc.list -t test_the_py -c /root/tmp/content.log -a /root/tmp/attch.log -n attachname1.log
將會把/root/tmp/content.log作為文件內容,
把/root/tmp/attch.log作為附件,
把attachname1.log作為附件名稱,
把test_the_py作為郵件標題的郵件;
從/root/tmp/sender.list文件里的發件人,
發送到/root/tmp/receiver.list和/root/tmp/receivercc.list文件里的收件人列表。