首頁  >  文章  >  後端開發  >  使用python發送和接收郵件實例代碼

使用python發送和接收郵件實例代碼

高洛峰
高洛峰原創
2017-03-21 13:44:491677瀏覽

關於電子郵件

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

發送郵件

SMTP協定

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

python中的SMTP模組

使用SMTP的基本步驟

  1. #連接伺服器

  2. 登入

  3. 發送服務請求

  4. #退出

  5. ##
    import smtplib
    from email import encoders
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    
    
    
    def 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來構造郵件的內容,這裡發送的是純文本的內容,我覺得最應該注意的就是這裡郵箱的密碼。另外各公司的郵件伺服器和連接埠都可能不同,使用前可以先查一下

這裡列幾個常用的:

##信箱163qq#接收郵件
SMTP伺服器 SSL協定連接埠 非SSL協定連接埠
smtp .163.com 465或994 25
smtp.11.com # 465或587 25

POP3與I

MAP

  1. ##POP是指郵局協議,目的是讓使用者可以存取郵箱伺服器中的郵件,允許使用者從伺服器上把郵件儲存到本地主機(即自己的電腦)上,同時刪除保存在郵件伺服器上的郵件,而POP3伺服器則是遵循POP3協定的接收郵件伺服器,用來接收電子郵件的。
  2. 後來又出現了IMAP協議(Interactive Mail Access Protocol),即互動式郵件存取協議,與POP3的不同在於:開啟了IMAP後,在電子郵件用戶端收取的郵件仍然保留在伺服器上,同時在客戶端上的操作都會回饋到伺服器上,如:刪除郵件,標記已讀等,伺服器上的郵件也會做對應的動作。

  3. 使用POP3
  4. python的poplib模組支援POP3,基本步驟:

連接到伺服器

登入發出服務請求退出#實例化POP3物件傳送使用者名稱到伺服器,等待伺服器回傳訊息密碼傳回郵件信箱的狀態list([msgnum])retr(msgnum)
poplib的常用方法:
方法 描述
#POP3(server)
,server是pop伺服器位址 user(username)
pass_(password)
#stat()
,傳回2元祖(訊息的數量,訊息的總位元組)
stat()的擴展,回傳一個3元祖(傳回訊息, 訊息清單, 訊息的大小),如果指定msgnum,就只傳回指定訊息的資料
取得詳細msgnum,設定為已讀,返回3元組(回傳訊息, 訊息msgnum的所以內容, 訊息的位元組數),如果指定msgnum,就只傳回指定訊息的資料

dele(msgnum )

將指定訊息標記為刪除

quit()範例
from poplib import POP3

p = POP3('pop.163.com')
p.user('xxxxxxx@163.com')
p.pass_('xxxxxxxx')

p.stat()
...

p.quit()
使用IMAPpython中的imaplib套件支援IMAP4常用方法:描述#IMAP4(server)login(user, pass)list()
登出,儲存修改,解鎖信箱,結束連接,退出
#方法
與IMAP伺服器建立連接
使用者密碼登入
查看所有的資料夾(IMAP可以支援建立資料夾)

######select()######選擇資料夾預設是"INBOX"########## ##search()######三個參數,第一的是CHARSET,通常為None(ASCII),第二個參數不知到是做什麼官方沒解釋########### ####範例###
import getpass, imaplib

M = 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()

以上是使用python發送和接收郵件實例代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn