<small id="7ktuj"></small>
      <bdo id="7ktuj"></bdo>
        <mark id="7ktuj"></mark>

        <source id="7ktuj"></source>
        <small id="7ktuj"></small>

        ITPub博客

        首頁 > 應用開發 > Python > 在Python如何使用SMTP發送郵件

        在Python如何使用SMTP發送郵件

        Python 作者:安全劍客 時間:2019-10-23 20:02:20 0 刪除 編輯
        SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用于由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。

        python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。

        Python創建 SMTP 對象語法
        import smtplib
         
        smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

        參數說明:

        host: SMTP 服務器主機。 你可以指定主機的ip地址或者域名如:w3cschool.cc,這個是可選參數。

        port: 如果你提供了 host 參數, 你需要指定 SMTP 服務使用的端口號,一般情況下SMTP端口號為25。

        local_hostname: 如果SMTP在你的本機上,你只需要指定服務器地址為 localhost 即可。

        Python SMTP對象使用sendmail方法發送郵件,語法如下:

        SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]

        參數說明:

        from_addr: 郵件發送者地址。

        to_addrs: 字符串列表,郵件發送地址。

        msg: 發送消息

        這里要注意一下第三個參數,msg是字符串,表示郵件。我們知道郵件一般由標題,發信人,收件人,郵件內容,附件等構成,發送郵件的時候,要注意msg的格式。這個格式就是smtp協議中定義的格式。

        實例
        以下是一個使用Python發送郵件簡單的實例
        #!/usr/bin/python
         
        import smtplib
         
        sender = 'from@fromdomain.com'
        receivers = ['to@todomain.com']
         
        message = """From: From PersonTo: To PersonSubject: SMTP e-mail test
         
        This is a test e-mail message.
        """
         
        try:
           smtpObj = smtplib.SMTP('localhost')
           smtpObj.sendmail(sender, receivers, message)         
           print "Successfully sent email"
        except SMTPException:
           print "Error: unable to send email"
        使用Python發送HTML格式的郵件

        Python發送HTML格式的郵件與發送純文本消息的郵件不同之處就是將MIMEText中_subtype設置為html。具體代碼如下:

        import smtplib  
        from email.mime.text import MIMEText  
        mailto_list=["YYY@YYY.com"] 
        mail_host="smtp.XXX.com"  #設置服務器
        mail_user="XXX"    #用戶名
        mail_pass="XXXX"   #口令 
        mail_postfix="XXX.com"  #發件箱的后綴
           
        def send_mail(to_list,sub,content):  #to_list:收件人;sub:主題;content:郵件內容
            me="hello"+"< "+mail_user+"@"+mail_postfix+">"   #這里的hello可以任意設置,收到信后,將按照設置顯示
            msg = MIMEText(content,_subtype='html',_charset='gb2312')    #創建一個實例,這里設置為html格式郵件
            msg['Subject'] = sub    #設置主題
            msg['From'] = me  
            msg['To'] = ";".join(to_list)  
            try:  
                s = smtplib.SMTP()  
                s.connect(mail_host)  #連接smtp服務器
                s.login(mail_user,mail_pass)  #登陸服務器
                s.sendmail(me, to_list, msg.as_string())  #發送郵件
                s.close()  
                return True  
            except Exception, e:  
                print str(e)  
                return False  
        if __name__ == '__main__':  
            if send_mail(mailto_list,"hello","小五義"):  
                print "發送成功"  
            else:  
                print "發送失敗"

        或者你也可以在消息體中指定Content-type為text/html,如下實例:

        #!/usr/bin/python
         
        import smtplib
         
        message = """From: From PersonTo: To PersonMIME-Version: 1.0
        Content-type: text/html
        Subject: SMTP HTML e-mail test
         
        This is an e-mail message to be sent in HTML format 
        This is HTML message.This is headline."""
         
        try:
           smtpObj = smtplib.SMTP('localhost')
           smtpObj.sendmail(sender, receivers, message)         
           print "Successfully sent email"
        except SMTPException:
           print "Error: unable to send email"
        Python發送帶附件的郵件

        發送帶附件的郵件,首先要創建MIMEMultipart()實例,然后構造附件,如果有多個附件,可依次構造,最后利用smtplib.smtp發送。

        from email.mime.text import MIMEText
        from email.mime.multipart import MIMEMultipart
        import smtplib
         
        #創建一個帶附件的實例
        msg = MIMEMultipart()
         
        #構造附件1
        att1 = MIMEText(open('d:123.rar', 'rb').read(), 'base64', 'gb2312')
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] = 'attachment; filename="123.doc"'#這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字
        msg.attach(att1)
         
        #構造附件2
        att2 = MIMEText(open('d:123.txt', 'rb').read(), 'base64', 'gb2312')
        att2["Content-Type"] = 'application/octet-stream'
        att2["Content-Disposition"] = 'attachment; filename="123.txt"'
        msg.attach(att2)
         
        #加郵件頭
        msg['to'] = 'YYY@YYY.com'
        msg['from'] = 'XXX@XXX.com'
        msg['subject'] = 'hello world'
        #發送郵件
        try:
            server = smtplib.SMTP()
            server.connect('smtp.XXX.com')
            server.login('XXX','XXXXX')#XXX為用戶名,XXXXX為密碼
            server.sendmail(msg['from'], msg['to'],msg.as_string())
            server.quit()
            print '發送成功'
        except Exception, e:  
            print str(e)

        以下實例指定了Content-type header 為 multipart/mixed,并發送/tmp/test.txt 文本文件:

        #!/usr/bin/python
         
        import smtplib
        import base64
         
        filename = "/tmp/test.txt"
         
        # 讀取文件內容并使用 base64 編碼
        fo = open(filename, "rb")
        filecontent = fo.read()
        encodedcontent = base64.b64encode(filecontent)  # base64
         
        sender = 'webmaster@tutorialpoint.com'
        reciever = 'amrood.admin@gmail.com'
         
        marker = "AUNIQUEMARKER"
         
        body ="""
        This is a test email to send an attachement.
        """
        # 定義頭部信息
        part1 = """From: From PersonTo: To PersonSubject: Sending Attachement
        MIME-Version: 1.0
        Content-Type: multipart/mixed; boundary=%s
        --%s
        """ % (marker, marker)
         
        # 定義消息動作
        part2 = """Content-Type: text/plain
        Content-Transfer-Encoding:8bit
         
        %s
        --%s
        """ % (body,marker)
         
        # 定義附近部分
        part3 = """Content-Type: multipart/mixed; name="%s"
        Content-Transfer-Encoding:base64
        Content-Disposition: attachment; filename=%s
         
        %s
        --%s--
        """ %(filename, filename, encodedcontent, marker)
        message = part1 + part2 + part3
         
        try:
           smtpObj = smtplib.SMTP('localhost')
           smtpObj.sendmail(sender, reciever, message)
           print "Successfully sent email"
        except Exception:
           print "Error: unable to send email"

        原文地址: https://www.linuxprobe.com/python-send-email.html

        來自 “ ITPUB博客 ” ,鏈接:http://www.ep4tq.com/31559985/viewspace-2661183/,如需轉載,請注明出處,否則將追究法律責任。

        請登錄后發表評論 登錄
        全部評論

        注冊時間:2018-11-01

        • 博文量
          674
        • 訪問量
          421071
        妹子图每日分享