使用python發送和內送郵件執行個體代碼

來源:互聯網
上載者:User

關於電子郵件

大學之前,基本不用郵箱,所以基本感覺不到它的存在,也不知道有什麼用;然而大學之後,隨著認識的人越來越多,知識越來越廣泛,郵箱已然成為很重要的通訊工具,大學一些課程作業需要有郵箱發給老師,註冊網站需要郵箱,找工作也需要郵箱;那麼電子郵箱是什麼原理呢?

發送郵件

SMTP協議

SMTP(Simple Mail Transfer Protocol)即簡易郵件傳輸通訊協定,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議簇,它協助每台電腦在發送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到收信人的伺服器上了,只要幾分鐘。

python中的SMTP模組

使用SMTP的基本步驟

  1. 串連伺服器

  2. 登入

  3. 發送服務要求

  4. 退出

import smtplibfrom email import encodersfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrdef send_email(from_addr, to_addr, subject, password):    msg = MIMEText("郵件內文",'html','utf-8')    msg['From'] = u'<%s>' % from_addr    msg['To'] = u'<%s>' % to_addr    msg['Subject'] = subject    smtp = smtplib.SMTP_SSL('smtp.163.com', 465)    smtp.set_debuglevel(1)    smtp.ehlo("smtp.163.com")    smtp.login(from_addr, password)    smtp.sendmail(from_addr, [to_addr], msg.as_string())if name == "main":    # 這裡的密碼是開啟smtp服務時輸入的用戶端登入授權碼,並不是郵箱密碼    # 現在很多郵箱都需要先開啟smtp才能這樣發送郵件    send_email(u"from_addr",u"to_addr",u"主題",u"password")

上面示範了用smtplib來發送郵件,並且使用了SSL加密,這樣相對安全,使用了email來構造郵件的內容,這裡發送的是純文字的內容,我覺得最應該注意的就是這裡郵箱的密碼。另外各個公司的郵件伺服器和連接埠都可能不同,使用前可以先查一下

這裡列幾個常用的:

郵箱 SMTP伺服器 SSL協議連接埠 非SSL協議連接埠
163 smtp.163.com 465或者994 25
qq smtp.11.com 465或587 25

內送郵件

POP3和IMAP

POP是指郵局協議,目的是讓使用者可以訪問郵箱伺服器中的郵件,允許使用者從伺服器上把郵件儲存到本地主機(即自己的電腦)上,同時刪除儲存在郵件伺服器上的郵件,而POP3伺服器則是遵循POP3協議的內送郵件伺服器,用來接收電子郵件的。

後來又出現了IMAP協議(Interactive Mail Access Protocol),即互動式郵件訪問協議,與POP3的不同在於:開啟了IMAP後,在電子郵件用戶端收取的郵件仍然保留在伺服器上,同時在用戶端上的操作都會反饋到伺服器上,如:刪除郵件,標記已讀等,伺服器上的郵件也會做相應的動作。

使用POP3

python的poplib模組支援POP3,基本步驟:

  1. 串連到伺服器

  2. 登入

  3. 發出服務要求

  4. 退出

poplib的常用方法:

方法 描述
POP3(server) 執行個體化POP3對象,server是pop伺服器位址
user(username) 發送使用者名稱到伺服器,等待伺服器返回資訊
pass_(password) 密碼
stat() 返回郵箱的狀態,返回2元祖(訊息的數量,訊息的總位元組)
list([msgnum]) stat()的擴充,返回一個3元祖(返回資訊, 訊息列表, 訊息的大小),如果指定msgnum,就只返回指定訊息的資料
retr(msgnum) 擷取詳細msgnum,設定為已讀,返回3元組(返回資訊, 訊息msgnum的所以內容, 訊息的位元組數),如果指定msgnum,就只返回指定訊息的資料
dele(msgnum) 將指定訊息標記為刪除
quit() 登出,儲存修改,解鎖郵箱,結束串連,退出

例子

from poplib import POP3p = POP3('pop.163.com')p.user('xxxxxxx@163.com')p.pass_('xxxxxxxx')p.stat()...p.quit()

使用IMAP

python中的imaplib包支援IMAP4

常用方法:

方法 描述
IMAP4(server) 與IMAP伺服器建立串連
login(user, pass) 使用者密碼登入
list() 查看所有的檔案夾(IMAP可以支援建立檔案夾)
select() 選擇檔案夾預設是"INBOX"
search() 三個參數,第一的是CHARSET,通常為None(ASCII),第二個參數不知到是幹什麼官方沒解釋

例子

import getpass, imaplibM = imaplib.IMAP4()M.login(getpass.getuser(), getpass.getpass())M.select()typ, data = M.search(None, 'ALL')for num in data[0].split():    typ, data = M.fetch(num, '(RFC822)')    print 'Message %s\n%s\n' % (num, data[0][1])M.close()M.logout()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.