加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python 发送邮件可以添加附件

发布时间:2020-12-17 17:11:24 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #!/usr/bin/pythonfrom email.MIMEText import MIMETextfrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEBase import MIMEBasefrom ema

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#!/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,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 "[email?protected],[email?protected]".
     -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,username,password)
    test.send(msg,filename)
else:
    usage()

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读