整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Python中的smtplib和email實現郵件發送

          Python中分別有兩個庫實現發送郵件,分別是smtplib和email。

          smtplib是用來發送郵件用的,email是用來構建郵件內容的。

          下面是具體使用:

          import smtplib
           
          server = smtplib.SMTP()
          server.connect(host, port)
          
          
          #連接(connect)指定的服務器,host是指定連接的郵箱服務器,通過搜索“xx郵箱服務器地址”,就可以找到
          #例如QQ郵箱的SMTP服務器地址是:smtp.qq.com。port是端口,一般情況下SMTP默認端口號為25
          
          server.login(username, password)
          #username:登錄郵箱的用戶名
          #password:授權碼
          server.sendmail(sender, to_addr, msg.as_string())
          
          #from_addr:郵件發送地址,就是上面的username
          #to_addr:郵件收件人地址
          #msg.as_string():為一個字符串類型 ,as_string()是將發送的信息msg變為字符串類型。
          server.quit()
          #退出服務器,結束SMTP會話

          備注:SMTP 協議是由源服務器到目的地服務器傳送郵件的一組規則。

          email 模塊:也就是用來寫郵件內容的模塊。這個內容可以是純文本、HTML內容、圖片、附件等多種形式。

          import email
          from email.mime.text import MIMEText
          #純文本或HTML頁面
          fromemail.mime.image import MIMEImage
          #內容形式為圖片
          fromemail.mime.multipart import MIMEMultipart
          #多形式組合,可包含文本和附件
           
          MIMEText方法:
          MIMEText(msg,type,chartset)
          # msg:文本內容,可自定義
          # type:文本類型,默認為plain(純文本)
          # chartset:文本編碼,中文為“utf-8”

          測試Demo

          這是我把自己的username和password省略了

          # 測試
          import smtplib
          from email.mime.textimport MIMEText
           
          username='你的@qq.com'
          password='XXXXXXXXX'
          sender='發給誰@qq.com'
          to_addr='run24118cajie@163.com'
          msg=MIMEText('你好這是用python發的一封郵件','plain','utf-8')
           
          server =smtplib.SMTP()
          server.connect('smtp.qq.com', 25)
          server.login(username,password)
          server.sendmail(sender,to_addr, msg.as_string())
          server.quit()

          發送成功

          標準發郵件的格式

          Python 的實際應用中,特別是在執行周期性定時任務的場景中,我們希望能夠一種簡單、方便的方式獲取任務的運行結果和狀態。一般我們通過支持郵件發送功能的方式,實現任務結果的反饋。本文主要介紹,如何通過 Python 實現郵件的自動發送,并以發送QQ郵件為例,分享完整的源碼示例。


          SMTP 協議屬于 TCP/IP 協議簇,是一種簡單郵件傳輸協議,用于在郵件服務器之間發送電子郵件。

          Python提供 smtplib 模塊定義了一個SMTP客戶端會話對象,提供了一種很方便的途徑發送電子郵件。發送郵件同時還需要 email 模塊,均為內置庫,無需安裝。接下來,我們先了解下這兩個模塊。


          smtplib 模塊

          發送郵件,主要通過 SMTP 類與郵件系統進行交互,smtplib 用法簡單,大致分為4個步驟,如下:

          1. 創建 SMTP 的對象并連接
          2. 登錄 SMTP 服務器
          3. 發送郵件
          4. 斷開連接

          對應上述步驟的代碼片段如下:


          email 模塊

          構造郵件內容,支持發送的郵件內容為純文本、超文本、圖片、附件的郵件。針對不同郵件內容有以下三類方法:

          • MIMEText:內容形式為純文本、超文本(html)。
          • MIMEImage:內容形式為圖片。
          • MIMEMultupart:多形式組合,可包含文本、圖片、附件。郵件類型為 alternative 的郵件包括純文本正文、超文本正文;郵件類型為 related 的郵件正文中包括圖片,聲音等內嵌資源。郵件類型為 mixed 的郵件包含附件,若一個郵件有純文本正文、超文本正文,內嵌資源、附件、則選擇 mixed 類型。

          每一類對應的導入方式如下:


          MIMEText plain 構造普通文本

          MIMEText html構造超文本

          MIMEText 構造base64數據流(附件)

          MIMEImage 構造圖片

          ?


          更改qq郵箱設置

          本文實現QQ郵件的發送,在具體編寫代碼實現郵件發送之前,首先我們要知道使用 Python代理登錄QQ郵箱發郵件時,需要先更改自己 QQ 郵箱設置,更改步驟主要分為兩步:

          1. 郵箱開啟 SMTP 功能
          2. 獲取授權碼

          1.首先登錄自己的郵箱,找到 設置 ,開啟 POP3/SMTP/IMAP 服務,如下:

          2.然后開啟并獲取客戶端授權碼,如下:

          QQ 郵箱 SMTP 服務器地址:smtp.qq.com


          Python實現示例

          現在我們實現一個函數,能夠發送純文本、超文本、附件內容,如下:

          查看我們的收件箱(一般在垃圾箱),就可以查看到郵件信息,如下:


          關聯閱讀:Python任務調度模塊APScheduler實現定時任務

          文我們將學習如何使用Python腳本來處理電子郵件。首先,我們將學習電子郵件消息格式,并使用smtplib模塊發送和接收電子郵件。然后將學習使用Python的Email程序包發送帶附件和HTML內容的電子郵件。最后將學習電子郵件的不同協議。

          本章將介紹以下內容。

          · 郵件消息格式。

          · 添加HTML和多媒體內容。

          · POP3和IMAP服務器。

          1 郵件消息格式

          本節我們將學習電子郵件的消息格式。電子郵件包含3個主要組件,如下所示。

          · 收件人的郵件地址。

          · 發件人的郵件地址。

          · 消息。

          消息中還包括其他組件,例如主題行、電子郵件簽名和附件等。

          下面是一個簡單的示例程序,它通過Gmail郵箱發送純文本電子郵件,我們可以從中了解如何編寫電子郵件并發送郵件?,F在創建一個腳本,命名為write_email_message.py,并在其中添加以下代碼。

          1. import smtplib
          2. import getpass
          3. 
          4. host_name = "smtp.gmail.com"
          5. port = 465
          6. 
          7. sender = 'sender_emil_id'
          8. receiver = 'receiver_email_id'
          9. password = getpass.getpass()
          10. 
          11. msg = """\
          12. Subject: Test Mail
          13. Hello from Sender !!"""
          14. 
          15. s = smtplib.SMTP_SSL(host_name, port)
          16. s.login(sender, password)
          17. s.sendmail(sender, receiver, msg)
          18. s.quit()
          19. 
          20. print("Mail sent successfully")

          運行腳本程序,如下所示。

          1. student@ubuntu:~/work/Chapter_11$ python3 write_email_message.py

          輸出如下。

          1. Password:
          2. Mail sent successfully

          上面的示例程序使用Python的smtplib模塊發送了電子郵件。首先確認是通過Gmail郵箱向收件人發送電子郵件。變量sender保存發件人的電子郵件地址。變量password中,可以直接輸入密碼,也可以使用getpass模塊在運行時提示輸入密碼,這里使用getpass提示輸入密碼。接下來創建了一個變量msg,它存儲了電子郵件消息的內容,其中首先指出了郵件主題,然后是將要發送的消息正文。然后,在login()函數中,傳入了sender和password變量。之后在sendmail()函數中,傳入了sender、receivers和msg變量。如此,就可成功發送電子郵件。

          2 添加HTML多媒體內容

          本節我們將了解如何添加HTML內容,以及如何將多媒體內容作為附件發送。這里使用Python的Email程序包。

          首先我們來看如何添加HTML內容。創建一個腳本,命名為add_html_content.py,并在其中添加以下代碼。

          1. import os
          2. import smtplib
          3. from email.mime.text import MIMEText
          4. from email.mime.multipart import MIMEMultipart
          5. import getpass
          6. 
          7. host_name = 'smtp.gmail.com'
          8. port = 465
          9. 
          10. sender = 'sender_emailid'
          11. password = getpass.getpass()
          12. receiver = 'receiver_emailid'
          13. 
          14. text = MIMEMultipart()
          15. text['Subject'] = 'Test HTML Content'
          16. text['From'] = sender
          17. text['To'] = receiver
          18. 
          19. msg = """\
          20. <html>
          21.   <body>
          22.     <p>Hello there, <br>
          23.        Good day !!<br>
          24.        <a href="http://www.baidu.com">Home</a>
          25.     </p>
          26.   </body>
          27. </html>
          28. """
          29. 
          30. html_content = MIMEText(msg, "html")
          31. text.attach(html_content)
          32. s = smtplib.SMTP_SSL(host_name, port)
          33. print("Mail sent successfully !!")
          34. 
          35. s.login(sender, password)
          36. s.sendmail(sender, receiver, text.as_string())
          37. s.quit()

          運行腳本程序,如下所示。

          1. student@ubuntu:~/work/Chapter_11$ python3 add_html_content.py

          輸出如下。

          1. Password:
          2. Mail sent successfully !!

          在上面的示例程序中,使用了Email程序包發送包含HTML內容的消息。其中的msg變量用于存儲HTML內容。

          現在我們來學習如何添加附件,并通過Python腳本發送帶附件的電子郵件。創建一個腳本,命名為add_attachment.py,并在其中添加以下代碼。

          1. import os
          2. import smtplib
          3. from email.mime.text import MIMEText
          4. from email.mime.image import MIMEImage
          5. from email.mime.multipart import MIMEMultipart
          6. import getpass
          7. 
          8. host_name = 'smtp.gmail.com'
          9. port = 465
          10. 
          11. sender = 'sender_emailid'
          12. password = getpass.getpass()
          13. receiver = 'receiver_emailid'
          14. 
          15. text = MIMEMultipart()
          16. text['Subject'] = 'Test Attachment'
          17. text['From'] = sender
          18. text['To'] = receiver
          19. 
          20. txt = MIMEText('Sending a sample image.')
          21. text.attach(txt)
          22. f_path = 'path_of_file'
          23. with open(f_path, 'rb') as f:
          24.     img = MIMEImage(f.read())
          25. img.add_header('Content-Disposition',
          26.                'attachment',
          27.                filename=os.path.basename(f_path))
          28. 
          29. text.attach(img)
          30. s = smtplib.SMTP_SSL(host_name, port)
          31. print("Attachment sent successfully !!")
          32. s.login(sender, password)
          33. s.sendmail(sender, receiver, text.as_string())
          34. s.quit()

          運行腳本程序,如下所示。

          1. student@ubuntu:~/work/Chapter_11$ python3 add_attachment.py

          輸出如下。

          1. Password:
          2. Attachment sent successfully !!

          上面的示例程序中,首先給出了發件人和收件人的電子郵件ID。然后在f_path中,給出了作為附件發送的圖像的文件路徑。最后將該圖像作為附件發送給收件人。

          3 POP3和IMAP服務器

          本節我們將學習如何通過POP3和IMAP服務器接收電子郵件。Python提供了poplib和imaplib模塊,用于通過Python腳本接收電子郵件。

          3.1 使用poplib模塊接收電子郵件

          POP3代表郵局協議版本3(Post Office Protocol version 3)。此標準協議可幫助我們接收從遠程服務器發送到本地計算機的電子郵件。POP3的主要優點是允許將電子郵件下載到本地計算機上,從而可以離線閱讀下載的電子郵件。

          POP3使用兩個端口。

          · 端口110:默認的不加密端口。

          · 端口995:加密端口。

          現在我們來看一些示例程序,首先是一個接收大量電子郵件的示例程序。創建一個腳本,命名為number_of_emails.py,并在其中添加以下代碼。

          1. import poplib
          2. import getpass
          3. 
          4. pop3_server = 'pop.gmail.com'
          5. username = 'Emaild_address'
          6. password = getpass.getpass()
          7. 
          8. email_obj = poplib.POP3_SSL(pop3_server)
          9. print(email_obj.getwelcome())
          10. email_obj.user(username)
          11. email_obj.pass_(password)
          12. email_stat = email_obj.stat()
          13. print("New arrived e-Mails are : %s (%s bytes)" % email_stat)

          運行腳本程序,如下所示。

          1. student@ubuntu:~$ python3 number_of_emails.py

          程序輸出的是郵箱中相當數量的電子郵件。

          上面的示例首先導入poplib模塊,該模塊在Python中通過POP3安全地接收電子郵件。然后,指定了具體的電子郵件服務器和電子郵件證書,即用戶名和密碼。之后輸出來自服務器的響應消息,并向POP3 SSL服務器提供用戶名和密碼。登錄后,程序會收到郵箱統計信息,并在終端輸出多封電子郵件。

          首先,我們編寫一個腳本來獲取最新的電子郵件。創建一個腳本,命名為latest_email.py,并在其中添加以下代碼。

          1. import poplib
          2. import getpass
          3. 
          4. pop3_server = 'pop.gmail.com'
          5. username = 'Emaild_address'
          6. password = getpass.getpass()
          7. 
          8. email_obj = poplib.POP3_SSL(pop3_server)
          9. print(email_obj.getwelcome())
          10. email_obj.user(username)
          11. email_obj.pass_(password)
          12. 
          13. print("\nLatest Mail\n")
          14. latest_email = email_obj.retr(1)
          15. print(latest_email[1])

          運行腳本程序,如下所示。

          1. student@ubuntu:~$ python3 latest_email.py

          這將獲取最近收到的郵件。

          在上面的示例程序中,導入了Python中的poplib模塊,并通過POP3安全地接收電子郵件。在給出指定的電子郵件服務器以及用戶名和密碼后,程序輸出了來自服務器的響應消息,并向POP3 SSL服務器提供用戶名和密碼,然后從郵箱中獲取最新的電子郵件。

          然后,編寫一個腳本來獲取所有電子郵件。創建一個腳本all_emails.py,并在其中添加以下代碼。

          1. import poplib
          2. import getpass
          3. 
          4. pop3_server = 'pop.gmail.com'
          5. username = 'Emaild_address'
          6. password = getpass.getpass()
          7. 
          8. email_obj = poplib.POP3_SSL(pop3_server)
          9. print(email_obj.getwelcome())
          10. email_obj.user(username)
          11. email_obj.pass_(password)
          12. 
          13. email_stat = email_obj.stat()
          14. NumofMsgs = email_stat[0]
          15. for i in range(NumofMsgs):
          16.     for mail in email_obj.retr(i+1)[1]:
          17.         print(mail)

          運行腳本程序,如下所示。

          1. student@ubuntu:~$ python3 latest_email.py

          這將獲取郵箱中所有電子郵件。

          3.2 使用imaplib模塊接收電子郵件

          IMAP代表Internet消息訪問協議(Internet Message Access Protocol),它通過本地計算機訪問遠程服務器上的電子郵件。IMAP允許多個客戶端同時訪問服務器上用戶的電子郵件。當用戶需要在不同客戶端訪問電子郵件時,更適合用IMAP完成這類操作。

          IMAP使用兩個端口。

          · 端口143:默認的不加密端口。

          · 端口993:加密端口。

          現在我們來看一個使用imaplib模塊的示例程序。創建一個腳本,命名為imap_email.py,并在其中添加以下代碼。

          1. import imaplib
          2. import pprint
          3. import getpass
          4. 
          5. imap_server = 'imap.gmail.com'
          6. username = 'Emaild_address'
          7. password = getpass.getpass()
          8. 
          9. imap_obj = imaplib.IMAP4_SSL(imap_server)
          10. imap_obj.login(username, password)
          11. imap_obj.select('Inbox')
          12. temp, data_obj = imap_obj.search(None, 'ALL')
          13. for data in data_obj[0].split():
          14.     temp, data_obj = imap_obj.fetch(data, '(RFC822)')
          15.     print('Message: {0}\n'.format(data))
          16.     pprint.pprint(data_obj[0][1])
          17.     break
          18. 
          19. imap_obj.close()

          運行腳本程序,如下所示。

          1. student@ubuntu:~$ python3 imap_email.py

          這將在指定文件夾中獲取所有電子郵件。

          在上面的示例程序中,首先導入了imaplib模塊,該模塊可以通過IMAP安全地接收電子郵件。然后,指定了電子郵件服務器和電子郵件證書,即用戶名和密碼。之后將該用戶名和密碼提供給IMAP SSL服務器。其中,在imap_obj上使用select()函數來顯示收件箱中的所有郵件。然后使用for循環來逐個顯示郵件消息。其中使用pprint()函數格式化對象,并將其寫入數據流。最后,程序關閉了連接。

          4 總結

          在本章中,我們學習了如何在Python腳本中編寫電子郵件消息,并且了解了Python 的smtplib模塊,該模塊可以使用Python腳本發送和接收電子郵件。還了解了如何通過POP3和IMAP接收電子郵件。Python提供了poplib和imaplib模塊,我們可以使用它們完成相關操作。

          在第12章中,我們將學習Telnet和SSH。

          5 問題

          1.什么是POP3和IMAP?

          2.什么是for循環中的break和continue?舉例說明。

          3.什么是pprint?

          4.什么是負索引,為什么要使用負索引?

          5.文件擴展名pyc和py有什么區別?

          6.使用循環語句生成以下文本。

          1. 1010101
          2.    10101
          3.      101
          4.        1


          主站蜘蛛池模板: 国产伦精品一区二区三区精品| 中文字幕一区二区三区在线不卡| 亚洲Aⅴ无码一区二区二三区软件| 亚洲变态另类一区二区三区| 熟妇人妻AV无码一区二区三区| 亚洲乱码av中文一区二区| 亚洲av不卡一区二区三区| 国产午夜精品一区二区三区 | 国产一区二区三区在线免费| 无码中文字幕一区二区三区| 性色AV一区二区三区天美传媒| 国产乱码精品一区二区三| 一区二区在线视频观看| 色妞AV永久一区二区国产AV| 性色av无码免费一区二区三区| 国产精品免费一区二区三区| 伦精品一区二区三区视频| 中文字幕在线看视频一区二区三区| 国产成人一区二区精品非洲| 天堂不卡一区二区视频在线观看 | 在线日韩麻豆一区| 夜夜添无码试看一区二区三区 | 国模无码一区二区三区| 一区二区三区无码视频免费福利| 国产精品久久久久久一区二区三区 | 亚洲区精品久久一区二区三区| 内射一区二区精品视频在线观看| 乱精品一区字幕二区| 亚洲熟妇成人精品一区| 北岛玲在线一区二区| 国产精品一区二区av| 精品一区二区三区四区在线播放 | 成人免费av一区二区三区| 无码人妻久久一区二区三区免费丨| 中文字幕一区二区免费| 麻豆天美国产一区在线播放| 国产一区二区三区小说| 韩国一区二区视频| 日韩国产一区二区| 亚洲视频在线观看一区| 日韩三级一区二区三区|