陳新龍
電子郵件是如何進(jìn)行交互傳輸?shù)模渴裁词请娮余]件協(xié)議?
電子郵件協(xié)議中最常用的是SMTP和IMAP兩種協(xié)議。SMTP一般用于發(fā)送郵件,是建立在FTP文件傳輸服務(wù)上的一種郵件服務(wù),主要用于從源地址到目的地址傳輸郵件的規(guī)范,SMTP的重要特性之一是其能跨越網(wǎng)絡(luò)傳輸郵件,即“SMTP郵件中繼”。在起草電子郵件并發(fā)起發(fā)送命令或者中轉(zhuǎn)郵件的時(shí)候,就會(huì)使用此協(xié)議。
IMAP(Internet郵件訪問(wèn)協(xié)議)一般用來(lái)收取郵件,是一個(gè)應(yīng)用層的協(xié)議,是一種臨時(shí)郵件訪問(wèn)協(xié)議,也被稱為交互式郵件訪問(wèn)協(xié)議。IMAP不會(huì)用于發(fā)送郵件,主要用于管理郵件以及從服務(wù)器上檢索電子郵件,獲取郵件的信息。IMAP協(xié)議運(yùn)行在TCP/IP協(xié)議之上,它與POP3協(xié)議的主要區(qū)別是用戶可以不用把所有的郵件全部下載,可以通過(guò)客戶端直接對(duì)服務(wù)器上的郵件進(jìn)行操作(圖1)。
我們采用編程的方式來(lái)更好理解郵件發(fā)送和接收的過(guò)程。
編程前的工作,在郵箱后臺(tái)開(kāi)啟IMAP/SMTP和POP3/SMTP服務(wù),找到用于連接到服務(wù)器的授權(quán)碼。用授權(quán)碼代替郵箱密碼登錄客戶端,即使郵箱密碼丟失,郵件也不會(huì)通過(guò)客戶端泄露。
以網(wǎng)易郵箱為例,進(jìn)入郵箱設(shè)置,進(jìn)入POP3/SMTP/IMAP設(shè)置,開(kāi)啟IMAP/SMTP和POP3/SMTP服務(wù),新增授權(quán)密碼,記下授權(quán)碼。
開(kāi)始編程,導(dǎo)入stmplib和email模塊。Python標(biāo)準(zhǔn)庫(kù)的smtplib模塊,用于實(shí)現(xiàn)按SMTP協(xié)議發(fā)送郵件。email模塊用于按郵件格式構(gòu)造內(nèi)容。定義變量,如網(wǎng)易郵箱SMTP服務(wù)器地址:smtp.163.com,QQ郵箱SMTP服務(wù)器地址:smtp.qq.com(圖2)。
指定發(fā)送端口號(hào),使用SSL協(xié)議(安全套接字協(xié)議)情況下端口號(hào)465。還需我們自己的郵箱賬號(hào)和授權(quán)碼,確保我們可以通過(guò)該郵箱賬號(hào)發(fā)送郵件,注意授權(quán)碼不是密碼,是在網(wǎng)站上申請(qǐng)的一串密鑰。
發(fā)送郵件時(shí)會(huì)創(chuàng)建一個(gè)SMTP對(duì)象,SMTP協(xié)議是由源服務(wù)器到目的地服務(wù)器傳送郵件的一組規(guī)則。我們需要通過(guò)SMTP指定一個(gè)服務(wù)器,這樣才能把郵件送到另一個(gè)服務(wù)器。然后通過(guò)SMTP_SSL方法連接上指定的服務(wù)器,login登錄郵箱(username和password分別代表郵箱賬號(hào)和申請(qǐng)的授權(quán)碼),最后通過(guò)sendmail方法指定發(fā)件人、收件人、發(fā)送的郵件內(nèi)容。as_string()是將發(fā)送的信息msg轉(zhuǎn)化為字符串類型。若郵件發(fā)送成功后對(duì)應(yīng)的收件郵箱中會(huì)出現(xiàn)郵件的信息即可查看。
這只是最基礎(chǔ)的文本信息郵件,接下來(lái)你可以查閱相關(guān)資料,看看怎樣發(fā)送攜帶附件的郵件。