一个python的邮件发送脚本,自动,定时,可以附件发送,抄送,附有说明文件

来源:互联网 发布:今日头条招聘php 编辑:程序博客网 时间:2024/04/28 14:00
#!/bin/env python
# -*- coding: utf-8 -*-
 
 
importdatetime
importsmtplib
importos,sys
fromemail.mime.text importMIMEText
fromemail.MIMEMultipart importMIMEMultipart
fromemail.MIMEBase importMIMEBase
fromoptparse importOptionParser
 
 
 
 
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
defgetUserAndPass(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 ''
defgetReceiverList(filename):
    lif=open(filename)
    li=lif.readlines()
    lif.close()
    forinrange(len(li)):
        li[x]=li[x].strip().strip(os.linesep)
    while'' inli:
        li.remove('')
    return(li)
 
 
 
 
#get content of the mail
defgetContent(filename):
    contenttmp=''
    ifos.path.exists(filename):
        contentf=open(filename)
        contenttmp=contentf.read()
        contentf.close()
    returncontenttmp
 
 
 
 
 
 
 
 
#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
ifnot options.sender:
    ifos.path.exists(EMAILHOME+r'/sender.list'):
        (sendername,senderpass)=getUserAndPass(EMAILHOME+r'/sender.list')
        ifsendername.strip()=="" or senderpass.strip()=="":
            print"no sender!"
            exit(0)
    else:
        print"no sender!"
        exit(0)
else:
    ifos.path.exists(options.sender):
        (sendername,senderpass)=getUserAndPass(EMAILHOME+r'/sender.list')
        ifsendername.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
ifnot options.receiver:
    ifos.path.exists(EMAILHOME+r'/receiver.list'oros.path.exists(EMAILHOME+r'/receivercc.list'):
        ifos.path.exists(EMAILHOME+r'/receiver.list'):
            receivertmplist=getReceiverList(EMAILHOME+r'/receiver.list')
        ifos.path.exists(EMAILHOME+r'/receivercc.list'):
            receivercctmplist=getReceiverList(EMAILHOME+r'/receivercc.list')
        receiverlist=receivertmplist+receivercctmplist
        iflen(receiverlist)==0:
            print"no receiver!"
            exit(0)
    else:
        print"no receiver list file!"
        exit(0)
else:
    ifos.path.exists(options.receiver) oros.path.exists(options.cc):
        ifos.path.exists(options.receiver):
            receivertmplist=getReceiverList(options.receiver)
        ifos.path.exists(options.cc):
            receivercctmplist=getReceiverList(options.cc)
        receiverlist=receivertmplist+receivercctmplist
        iflen(receiverlist):
            print"no receiver from the list file!"
            exit(0)
    else:
        print"receiver list file does not exist!"
        exit(0)
 
 
if options.attach andnot options.nameattach:
    print"give a name to the attachment!"
    exit(0)
     
 
 
#make a mail   
mailall=MIMEMultipart()   
     
#content of the mail   
ifoptions.content:
    mailcontent =getContent(options.content)
    mailall.attach(MIMEText(mailcontent,options.form,'utf-8'))
elifoptions.info:
    mailcontent =str(options.info)
    mailall.attach(MIMEText(mailcontent,options.form,'utf-8'))
 
 
#attachment of the mail   
ifoptions.attach:
    mailattach =getContent(options.attach)
    ifmailattach !='':
        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)
iflen(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)
exceptException,e:
    print"error when connect the smtpserver with the given username and password !"
    printe
    exit(0)
 
 
print"connect ok!"
 
 
try:
    mailconnect.sendmail(sendername, receiverlist, fullmailtext)
exceptException,e:
    print"error while sending the email!"
finally:
    mailconnect.quit()
 
 
print'email to '+str(receiverlist)+' over.'
 
print'***'*80

 

 

 

 

———————————————————————————————————————————————

说明:

#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文件里的收件人列表。
0 0
原创粉丝点击