大學之前,基本上不用郵箱,所以基本上感覺不到它的存在,也不知道有什麼用;然而大學之後,隨著認識的人越來越多,知識越來越廣泛,郵箱已然成為很重要的通訊工具,大學一些課程作業需要有郵箱發給老師,註冊網站需要郵箱,找工作也需要郵箱;那麼電子郵箱是什麼原理呢?
SMTP協定
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")
SMTP伺服器 | SSL協定連接埠 | 非SSL協定連接埠 | |
---|---|---|---|
smtp .163.com | 465或994 | 25 | |
smtp.11.com | # 465或587 | 25 |
後來又出現了IMAP協議(Interactive Mail Access Protocol),即互動式郵件存取協議,與POP3的不同在於:開啟了IMAP後,在電子郵件用戶端收取的郵件仍然保留在伺服器上,同時在客戶端上的操作都會回饋到伺服器上,如:刪除郵件,標記已讀等,伺服器上的郵件也會做對應的動作。
python的poplib模組支援POP3,基本步驟:
連接到伺服器
發出服務請求 | |
---|---|
poplib的常用方法: | |
方法 | 描述 |
#POP3(server) | |
,server是pop伺服器位址 | user(username) |
pass_(password) | |
#stat() | |
,傳回2元祖(訊息的數量,訊息的總位元組) | |
stat()的擴展,回傳一個3元祖(傳回訊息, 訊息清單, 訊息的大小),如果指定msgnum,就只傳回指定訊息的資料 |
登出,儲存修改,解鎖信箱,結束連接,退出 | |
---|---|
python中的imaplib套件支援IMAP4 | 常用方法: |
#方法 | |
與IMAP伺服器建立連接 | |
使用者密碼登入 |
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中文網其他相關文章!