大學以前,基本不用郵箱,因此基本感受不到它的存在,也不知道有什麼用;然而大學以後,隨着認識的人愈來愈多,知識愈來愈普遍,郵箱已然成爲很重要的通信工具,大學一些課程做業須要有郵箱發給老師,註冊網站須要郵箱,找工做也須要郵箱;那麼電子郵箱是什麼原理呢?html
SMTP協議python
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。經過SMTP協議所指定的服務器,就能夠把E-mail寄到收信人的服務器上了,只要幾分鐘。安全
使用SMTP的基本步驟服務器
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來構造郵件的內容,這裏發送的是純文本的內容,我以爲最應該注意的就是這裏郵箱的密碼。另外各個公司的郵件服務器和端口均可能不一樣,使用前能夠先查一下工具
這裏列幾個經常使用的:fetch
郵箱 | SMTP服務器 | SSL協議端口 | 非SSL協議端口 |
---|---|---|---|
163 | smtp.163.com | 465或者994 | 25 |
smtp.11.com | 465或587 | 25 |
POP3和IMAP網站
POP是指郵局協議,目的是讓用戶能夠訪問郵箱服務器中的郵件,容許用戶從服務器上把郵件存儲到本地主機(即本身的計算機)上,同時刪除保存在郵件服務器上的郵件,而POP3服務器則是遵循POP3協議的接收郵件服務器,用來接收電子郵件的。ui
後來又出現了IMAP協議(Interactive Mail Access Protocol),即交互式郵件訪問協議,與POP3的不一樣在於:開啓了IMAP後,在電子郵件客戶端收取的郵件仍然保留在服務器上,同時在客戶端上的操做都會反饋到服務器上,如:刪除郵件,標記已讀等,服務器上的郵件也會作相應的動做。加密
python的poplib模塊支持POP3,基本步驟:debug
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 POP3 p = POP3('pop.163.com') p.user('xxxxxxx@163.com') p.pass_('xxxxxxxx') p.stat() ... p.quit()
python中的imaplib包支持IMAP4
經常使用方法:
方法 | 描述 |
---|---|
IMAP4(server) | 與IMAP服務器創建鏈接 |
login(user, pass) | 用戶密碼登陸 |
list() | 查看全部的文件夾(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()
更詳細的內容能夠看官方文檔: