python邮件收发
python郵件收發(fā)
文章目錄
- python郵件收發(fā)
- 協(xié)議簡介
- pop3
- IMAP
- SMTP
- 功能構想
- 郵件的收取
- 代碼示例
- 郵件的發(fā)送
- 代碼示例
- 總結(jié)
協(xié)議簡介
簡單介紹一下,具體信息可參考圖解TCTCP/IP這本書,不需要深入了解實現(xiàn)
pop3
POP3是Post Office Protocol 3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機連接到Internet的郵件服務器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標準,POP3允許用戶從服務器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協(xié)議的接收郵件服務器,用來接收電子郵件的。
IMAP
IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標準協(xié)議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操作都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會做相應的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的。
SMTP
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對smtp協(xié)議進行了簡單的封裝。
功能構想
我們在這里實現(xiàn)簡單的收發(fā),更多功能可自由實現(xiàn)
郵件的收取
使用poplib庫,email庫來實現(xiàn)我們的收取
代碼示例
#-*- encoding: gb2312 -*- import os, sys, string import poplib# pop3服務器地址 host = "pop3.163.com" # 用戶名 username = "xxxxxx@163.com" # 密碼 password = "xxxxxxx" # 創(chuàng)建一個pop3對象,這個時候?qū)嶋H上已經(jīng)連接上服務器了 pp = poplib.POP3(host) # 設置調(diào)試模式,可以看到與服務器的交互信息 pp.set_debuglevel(1) # 向服務器發(fā)送用戶名 pp.user(username) # 向服務器發(fā)送密碼 pp.pass_(password) # 獲取服務器上信件信息,返回是一個列表,第一項是一共有多上封郵件,第二項是共有多少字節(jié) ret = pp.stat() print ret # 需要取出所有信件的頭部,信件id是從1開始的。 for i in range(1, ret[0]+1):# 取出信件頭部。注意:top指定的行數(shù)是以信件頭為基數(shù)的,也就是說當取0行,# 其實是返回頭部信息,取1行其實是返回頭部信息之外再多1行。mlist = pp.top(i, 0)print 'line: ', len(mlist[1]) # 列出服務器上郵件信息,這個會對每一封郵件都輸出id和大小。不象stat輸出的是總的統(tǒng)計信息 ret = pp.list() print ret # 取第一封郵件完整信息,在返回值里,是按行存儲在down[1]的列表里的。down[0]是返回的狀態(tài)信息 down = pp.retr(1) print 'lines:', len(down) # 輸出郵件 for line in down[1]:print line # 退出 pp.quit() 在有些地方,有安全郵件這一說,其實是對pop3做了ssl加密。這樣的,poplib一樣可以處理,只不過不是用POP3這個類,而是用POP3_SSL, 他們的方法都一樣。因此支持ssl在上面代碼中,替換創(chuàng)建pop3對象的一行為:pp = poplib.POP3_SSL(host)郵件的發(fā)送
使用smtp實現(xiàn)發(fā)送郵件
代碼示例
#!/usr/bin/python # -*- coding: UTF-8 -*-import smtplib from email.mime.text import MIMEText from email.header import Headersender = 'from@runoob.com' receivers = ['429240967@qq.com'] # 接收郵件,可設置為你的QQ郵箱或者其他郵箱# 三個參數(shù):第一個為文本內(nèi)容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼 message = MIMEText('Python 郵件發(fā)送測試...', 'plain', 'utf-8') message['From'] = Header("菜鳥教程", 'utf-8') # 發(fā)送者 message['To'] = Header("測試", 'utf-8') # 接收者subject = 'Python SMTP 郵件測試' message['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP('localhost')smtpObj.sendmail(sender, receivers, message.as_string())print "郵件發(fā)送成功" except smtplib.SMTPException:print "Error: 無法發(fā)送郵件"附上菜鳥教程的文章
總結(jié)
添加這種收發(fā)模塊到自己的服務器上運行的服務上,可以增加交互性,實現(xiàn)諸如自動回復,錯誤報警等功能,對我還是比較實用的,關于自動回復
個人水平不足,相關信息都是學習自他人博客,錯誤在所難免,歡迎指出
郵箱:minkeskl@qq.com
總結(jié)
以上是生活随笔為你收集整理的python邮件收发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Leedcode][JAVA][第13
- 下一篇: python 方向盘_Carla 0.9