今天搞個exchage郵件服務(wù)器發(fā)送郵件的問題, 由于對整個機(jī)制不熟悉,費(fèi)了很大功夫才弄出來,主要是端口用錯了,這里記錄一下:

25:SMTP 80:HTTP 110:POP3 143:IMAP
443:HTTPS 587:SMTP 993:IMAP4 SSL 995:POP3 SSL
關(guān)于SMTP 和 POP3 IMAP的解釋知乎上有一段:
作者:知行合一
鏈接:https://www.zhihu.com/question/24605584/answer /103769637
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
POP3是Post Office Protocol 3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計(jì)算機(jī)連接到Internet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(jī)(即自己的計(jì)算機(jī))上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。
與IMAP有什么區(qū)別 POP3協(xié)議允許電子郵件客戶端下載服務(wù)器上的郵件,但是在客戶端的操作(如移動郵件、標(biāo)記已讀等),不會反饋到服務(wù)器上,比如通過客戶端收取了郵箱中的3封郵件并移動到其他文件夾,郵箱服務(wù)器上的這些郵件是沒有同時被移動的 。 而IMAP提供webmail 與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到服務(wù)器上,對郵件進(jìn)行的操作,服務(wù)器上的郵件也會做相應(yīng)的動作。 同時,IMAP像POP3那樣提供了方便的郵件下載服務(wù),讓用戶能進(jìn)行離線閱讀。IMAP提供的摘要瀏覽功能可以讓你在閱讀完所有的郵件到達(dá)時間、主題、發(fā)件人、大小等信息后才作出是否下載的決定。此外,IMAP 更好地支持了從多個不同設(shè)備中隨時訪問新郵件。 總之,IMAP 整體上為用戶帶來更為便捷和可靠的體驗(yàn)。POP3 更易丟失郵件或多次下載相同的郵件,但 IMAP 通過郵件客戶端與webmail 之間的雙向同步功能很好地避免了這些問題。
SMTP SMTP 的全稱是“Simple Mail Transfer Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇,它幫助每臺計(jì)算機(jī)在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器。 SMTP 認(rèn)證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾郵件的散播者無可乘之機(jī)。 增加 SMTP 認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_。 IMAP IMAP全稱是Internet Mail Access Protocol,即交互式郵件存取協(xié)議,它是跟POP3類似郵件訪問標(biāo)準(zhǔn)協(xié)議之一。不同的是,開啟了IMAP后,您在電子郵件客戶端收取的郵件仍然保留在服務(wù)器上,同時在客戶端上的操作都會反饋到服務(wù)器上,如:刪除郵件,標(biāo)記已讀等,服務(wù)器上的郵件也會做相應(yīng)的動作。所以無論從瀏覽器登錄郵箱或者客戶端軟件登錄郵箱,看到的郵件以及狀態(tài)都是一致的
python代碼:
import smtplib
url = YOUR_EXCHANGE_SERVER
conn = smtplib.SMTP(url,587) # 注意必須是25 或者 587
conn.starttls() # 先創(chuàng)建SSL安全連接,exchange、gemail必須有這一步, 163有沒有均可
user,password = (EXCHANGE_USER,EXCHANGE_PASSWORD)
conn.login(user,password)
msg = MIMEText('關(guān)于python smtp的測試郵件','plain', 'utf-8')
msg['From'] = formataddr(["fx01", fromaddr])
msg['To'] = formataddr(["fx02", toaddrs])
msg['Subject'] = "關(guān)于python smtp的測試郵件"
conn.sendmail(fromaddr, [toaddrs, fromaddr], msg.as_string())
conn.quit() # 關(guān)閉連接
參考:http://stackoverflow.com/questions/288546/connect-to-exchange-mailbox-with-python