一个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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | #!/bin/env python# -*- coding: utf-8 -*-import datetimeimport smtplibimport os,sysfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom optparse import OptionParserEMAILHOME=sys.path[0]#sender name and passwordsendername=""senderpass=""#list of all receiver (include cc-receiver)receiverlist=[]receivertmplist=[]receivercctmplist=[]#get the username and pasword#no try catch heredef 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 maildef getContent(filename): contenttmp='' if os.path.exists(filename): contentf=open(filename) contenttmp=contentf.read() contentf.close() return contenttmp#parameters processparser = 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 inforif 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 receiverif 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.titlemailall['From']=sendernamemailall['To']=str(receivertmplist)if len(receivercctmplist) !=0: mailall['CC']=str(receivercctmplist)#get the text of mailallfullmailtext=mailall.as_string()print ("prepare fullmailtext ok.")mailconnect = smtplib.SMTP(options.server)try: mailconnect.login(sendername,senderpass)except Exception as 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 as e: print ("error while sending the email!")finally: mailconnect.quit()print ('email to '+str(receiverlist)+' over.')print ('***'*80) |
说明:
#mail.py使用方法:
1,本脚本同目录下文件介绍:
sender.list:邮件发送者邮箱和密码,第一行账号(如[email protected]),第二行密码(必须项,不能为空)
receiver.list:邮件接收者列表,每行一个收件人(如[email protected])
receivercc.list:邮件抄送者列表,每行一个收件人(如[email protected])
调用方法举例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文件里的收件人列表。
目录 返回
首页