pop3message緩存
『壹』 c++語言pop3協議得到的郵件內容怎麼解析
郵件內容協議分成很多個段落
首先是日期 Date: RFC 5322 日期格式
然後是收件人發件人段,「To:」 和 "From",以及抄送 "Cc:「 和 "Bcc「
隨後是「Message-ID: 「,用於伺服器在消息流通中不至於重復發送和存儲,識別郵件的唯一性。
最後一段比較關鍵,格式類似於這樣:
MIME-Version: 1.0 Content-type: multipart/alternative; boundary="(boundary)"
意思是表示郵件採用MIME內容編碼,可以是多個組成部分,由邊界線boundary劃分為多個數據區。數據區之間的內容可以是html或者普通文本(參考下列代碼)關鍵是所有文本內容都是用 base64編碼重新編排過,所以要用decode_base64解開才能讀取。
f!text.isEmpty{
body+="--(boundary) Content-Type:text/plain;charset=UTF-8;format=flowed (text) "
}
if!content.isEmpty{
body+="--(boundary) Content-Type:text/html;charset=UTF-8 (content) "
}
直接去解析是比較費勁的,因為其實整個編碼都是採用了http傳輸協議的 mime 方式。建議用現成的開源代碼去讀去,比如CHTTPParser,速度快,效率高,都已經通過幾十年檢驗了的成熟代碼。
『貳』 POP3/IMAP/SMTP服務的相關問題
IMAP是斯坦福大學在1986年開發的,它是一個開放的標准,被設計成POP的超集,而POP是個地位牢固的開放郵件標准。IMAP標準的最新版是IMAP第4版修訂版1(RFC 2060)。IMAP第4版修訂版1與IMAP4的實際差別僅僅在於前者提高了撥號鏈路的性能。有關IMAP4標準的詳細信息請參見華盛頓大學的IMAP主頁(www.washington.e/imap/ )盡管在日常使用中,IMAP的特性及對它的支持還沒有壓倒POP3,但是它的發展趨勢已經顯而易見了。主要的群件產品廠商都計劃支持IMAP4。
根據定義,POP3是個存儲轉發的信息交換系統。POP3郵件伺服器把消息發送給客戶,自己並不在伺服器上保存副本。與之不同,IMAP4是個客戶機/服行派務器模式的應用。無論是POP3還是IMAP4,進來的郵件都存儲在中央的郵件伺服器上。用戶使用遵循協議的郵件客戶軟體來連接到郵件伺服器上,先進行身份驗證,鑒定登錄名和口令,然後用戶才獲得訪問郵箱的權利。但是,二者的共性僅限於此。
與POP3不同,IMAP4能以三種模式或者說消息傳送範式來與客戶進行交互:離線、在線和斷連方式。此外,IMAP4可以讓用戶訪問多個私用和共享郵箱。
在離線方式中,客戶軟體把郵箱存儲在本地硬碟上以進行讀取和撰寫信息的工作。當需要發送和接受消息時,用戶才連接伺服器。對於那些長期奔波、很少停留在某個固定處所的人,他們通常使用離線方式。POP3典型地以離線方式工作。
相比之下,在線用戶訪問的郵箱是在郵件伺服器上,但是郵箱仍然由客戶軟體處理。郵件始終存儲在伺服器上。在線方式主要是由位置固定的用戶使用,典型地是在快速LAN連接下進行。但是備悄從遠程撥進的功能較弱的計算機在這種模式下也可以工作得很好。有一些POP3伺服器也提供了在線功能,但是,它們沒有達到IMAP4的功能級別。
斷連方式提供了最大的靈活性。客戶軟體把用戶選定的消息和附件復制或緩存到本地磁碟上,並把原始副本留存在郵件伺服器上。緩存中的郵件可以被用戶處理,以後用戶重新連接郵件伺服器時,這些郵件可以與伺服器進行再同步。當前,該特性主要由郵件伺服器實現,很少有客戶軟體支持斷連方式。在我們評測的產品中,Sun的Internet Mail Client 是唯一提供這一功能的客戶軟體。
對於IMAP4而言,無論是在哪一種操作系統上,使用IMAP4郵件客戶軟體的用戶都可以讀取和回復郵件,遠程地把郵件存儲在層次式的文件夾中,並且可通過IMAP4郵件主機同步客戶文件。客戶軟體和伺服器相互配合,允許過濾來自特定地址的郵件,還能夠防止通過低速撥號鏈路下載大文件。用戶可以查看主機上的郵件報文,如果需要,可以決定把其中哪些內容下載到遠程連接的客戶機上。用戶還可以有選擇地下載郵件,而不必非要下載郵件的附件。
IMAP與POP3的比較
POP3提供了快捷的郵件下載服務,用戶可以利用POP3把郵箱里的信下載到PC上進行離線閱讀。一旦郵件進入PC的本地硬碟,就可以選擇把郵件從伺服器上刪除,然後脫離與Internet的連接並選擇在任何時候閱讀已經下載的郵件。
IMAP同樣提供了方便的郵件下載服務,讓用戶能進行離線閱讀,但IMAP能完成的卻遠遠不只這些。首先,IMAP提供的摘要瀏覽功能可以讓你檔滾賀在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。也就是說,你不必等所有的郵件都下載完畢後才知道究竟郵件里都有些什麼。如果你根據摘要信息就可以決定某些郵件對你毫無用處,你就可以直接在伺服器上把這些郵件刪除掉,而不必浪費你寶貴的上網時間。如果你的IMAP客戶端軟體完整支持IMAP4rev1的話(如Netscape 4.5),則你還可以享受選擇性下載附件的服務。舉例來說,假如一封郵件里含有大大小小共5個附件,而其中只有兩個附件是你需要的,你就可以只下載那兩個附件,節省了下載其餘三個的時間。
參考資料:http://mail.cstnet.cn/za/faq.html
『叄』 javaMail常見問題之POP3問題
問 我可以從哪裡找到 POP 的支持?答 在 JavaMail 及以上版本中包括了 POP 提供程序 POP 提供程序也可從多個第三方提供商獲得 請瀏覽我們的 第三方產品清單 獲取進一步信息 問 我想在 POP 伺服器上刪除消息 我在這些消息上設置了 DELETED 標志 然後調用 expunge() 方法 但我得到了MethodNotSupportedException 當使用 Sun 的 POP 提供程序時 我如何刪除消息? 答 POP 提供程序不支持 expunge() 方法 不過 可以關閉 expunge 標志設為 true 的文件夾 也就是調用 folder close(true) 問 在從 Sun POP 提供程序獲得的消息中 我如何可以檢索 POP UIDL?答 對於 POP 提供程序 這是可能的 參見 sun mail pop 包文檔 獲取進一步信息 問 對於 POP 我如何知道哪裡消息是新的?答 POP 協議不提供任何永久標志的支持 因此 RECENT 標志是沒有用的 sun mail pop 包文檔討余叢論了幾個策略 它們可用於處理這一問題 問 當使用 POP 時 為什麼 hasNewMessages() 總是返回 false?答 POP 協議沒有提供辦法來決定文件夾是否有新消息 問 我創建了 MessageCountListener(如 monitor 程序中所展示的) 但在我的 POP INBOX(收件箱)中 我從未得到通知 答 當 INBOX 打開時 POP 協議不允許客戶端查看傳送到 INBOX 的新消息 應用程序必須關閉 INBOX 然後重新打開它 才可以查看新消息 對於 POP 使用 MessageCountListener 介面 你從不會得到新郵件的通知 參見 sun mail pop 包文檔(在 JavaMail 下載包的 docs/sundocs 目錄) 獲取進一步信息 問 當使用 POP 時 為什麼 getReceivedDate() 返回 null?答 POP 協議不提供有關何時接收消息的信息 通過查看一些消息標題 比如 Received 標題 可能可以猜到接收日期 但這非常不可靠 問 當使用 POP 時 我得到了有關 SocketFetcher 類的抱怨 答 很有可能在 CLASSPATH 中有多個版本的 pop jar 或 mail jar 檢查 CLASSPATH 的設置 如果你正在使用 JDK 或更新版本 檢查 JDK 中的 jre/lib/ext 目錄 確保拆森你只有 JavaMail mail jar 可用並且沒有 pop jar 只有對於較老版本的 JavaMail pop jar 才是必要的 問 當使用 POP 時 我得到了有關 contentStream 欄位的抱怨 答 錯誤通常像下面這樣 java lang NoSuchFieldError: contentStream at sun mail pop POP Message getContentStream(POP Message java: )像 上面 一樣 使用混合版本的 POP 提供程序和 mail jar 在包括 POP 提供程序的較新版本 mail jar 之前 你可能在 CLASSPATH中有了較老版本 問 除了 POP 伺服器上的 INBOX(收件箱)外 您如何訪問或創建文件夾?答 不能 POP 伺服器只支持每個用戶一個郵箱 大多數使用 POP 的郵件閱讀者也維護著本地消息存儲 他們可以將傳入的消息(來自 POP INBOX)復制到存儲中 並允許你將消息寫到其他文件夾 參見 本項目 獲取有關本地存儲提供程豎御櫻序的進一步消息 lishixin/Article/program/Java/JSP/201311/19707
『肆』 郵箱進不去了與pop3有關系嗎
http://jingyan..com/article/59703552e32ee08fc0074017.html
分享打不開的原因:
1
QQ郵箱及空間打不開的原因:
2
1.可能是瀏覽器被挾持,找不到默認的瀏覽器。
3
2.可能是緩存、cookie或臨時文件造成的。
4
3.可能是電腦的中病毒或安裝了流氓軟體。
END
瀏覽器被挾持,找不到默認的瀏覽器:
1
找到你平時喜歡的瀏覽器衫鏈舉,在欄目裡面,設置瀏覽器為默認的瀏覽器。
2
一般在瀏覽器的工具欄目下面,有一個設為默認瀏覽器。
END
緩存、cookie或臨時文件造成的:
在工具欄目下面,有一個Internet選項。點擊打開。
打開過後,在彈窗的窗口內找到如圖所示或如圖類似的圖標。點刪除。
然後,在下面的彈窗的窗口內點刪除。
END
電腦的中病毒或安裝了流氓軟體:
1
打開你喚消的殺或碧毒軟體全盤殺毒。再清理一下插件及硬碟上的垃圾。
2
如果還不能,那就是你ie出問題了,修復一下ie,用超級兔子或金山毒霸。
『伍』 說明POP3、SMTP協議的區別
POP3、SMTP協議的區別如下:
1、二者功能不同
POP3允許用戶從伺服器上把郵件存儲到本地友友主機(即自己的計算機)上,同時刪除保存在郵件伺服器上的郵件,而SMTP伺服器則是遵循POP3協議的接收郵件伺服器,用來接收電子郵件的。
2、二者客好好槐戶端操作的反饋不同
POP3協議允許電子郵件客戶端下載伺服器上的郵件,但是在客戶端的操作(如移動郵件、標記已讀等),不會反饋到伺服器上。而IMAP提供webmail 與電子郵件客戶端之間的雙向通信,客戶端的操作都會反饋到伺服器上,對郵件進行的操作,伺服器上的郵件也會做相應的動作。
3、二者服務不同
IPOP3提供了方便的郵件下載服務,讓用戶能進行離線閱讀。IMAP提供的摘要瀏覽功能可以讓在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。
(5)pop3message緩存擴展閱讀:
SMTP即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每台計算機在發送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到收信人的伺服器上了,整個過程只要幾分鍾。
SMTP伺服器則是遵循SMTP協議的發送郵件伺服器,用來發送或中轉發出的電子郵件。 POP3協議是一個簡單的協議,它用於從遠程郵件伺服器上獲取郵件,幫助用戶登錄到郵件伺服器上、取郵件、刪除郵件等。
參考資料來襪侍源:網路-POP3
參考資料來源:網路-SMTP
『陸』 求助專業莓友:Hub用pop3方式收郵件的問題
SMTP用於發送郵件,如果要收取郵件呢?
收取郵件就是編寫一個MUA作為客戶端,從MDA把郵件獲取到用戶的電腦或者手機上。收取郵件最常用的協議是POP協議,目前版本號是3,俗稱POP3。
Python內置一個poplib模塊,實現了POP3協議,可以直接用來收郵件。
注意到POP3協議收取的不是一個已經可以閱讀的郵件本身,而是郵件的原始文本,這和SMTP協議很像,SMTP發送的也是經過編碼後的一大段文本。
要把POP3收取陪旁的文本變成可以閱讀的郵件,還需要用email模塊提供的各種類來解析原始文本,變成可閱讀的郵件對象。
所以,收取郵件分兩步:
第一步:用poplib把郵件的原始文本下載到本地;
第二部:用email解析原始文本,還原為郵件對象。
通過POP3下載郵件
POP3協議本身很簡單,以下面的代碼為例,蘆瞎橡我們來獲取最新的一封郵件內容神此:
import poplib
# 輸入郵件地址, 口令和POP3伺服器地址:
email = raw_input('Email: ')
password = raw_input('Password: ')
pop3_server = raw_input('POP3 server: ')
# 連接到POP3伺服器:
server = poplib.POP3(pop3_server)
# 可以打開或關閉調試信息:
# server.set_debuglevel(1)
# 可選:列印POP3伺服器的歡迎文字:
print(server.getwelcome())
# 身份認證:
server.user(email)
server.pass_(password)
# stat()返回郵件數量和佔用空間:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有郵件的編號:
resp, mails, octets = server.list()
# 可以查看返回的列表類似['1 82923', '2 2184', ...]
print(mails)
# 獲取最新一封郵件, 注意索引號從1開始:
index = len(mails)
resp, lines, octets = server.retr(index)
# lines存儲了郵件的原始文本的每一行,
# 可以獲得整個郵件的原始文本:
msg_content = '\r\n'.join(lines)
# 稍後解析出郵件:
msg = Parser().parsestr(msg_content)
# 可以根據郵件索引號直接從伺服器刪除郵件:
# server.dele(index)
# 關閉連接:
server.quit()
用POP3獲取郵件其實很簡單,要獲取所有郵件,只需要循環使用retr()把每一封郵件內容拿到即可。真正麻煩的是把郵件的原始內容解析為可以閱讀的郵件對象。
解析郵件
解析郵件的過程和上一節構造郵件正好相反,因此,先導入必要的模塊:
import email
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
只需要一行代碼就可以把郵件內容解析為Message對象:
msg = Parser().parsestr(msg_content)
但是這個Message對象本身可能是一個MIMEMultipart對象,即包含嵌套的其他MIMEBase對象,嵌套可能還不止一層。
所以我們要遞歸地列印出Message對象的層次結構:
# indent用於縮進顯示:
def print_info(msg, indent=0):
if indent == 0:
# 郵件的From, To, Subject存在於根對象上:
for header in ['From', 'To', 'Subject']:
value = msg.get(header, '')
if value:
if header=='Subject':
# 需要解碼Subject字元串:
value = decode_str(value)
else:
# 需要解碼Email地址:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
print('%s%s: %s' % (' ' * indent, header, value))
if (msg.is_multipart()):
# 如果郵件對象是一個MIMEMultipart,
# get_payload()返回list,包含所有的子對象:
parts = msg.get_payload()
for n, part in enumerate(parts):
print('%spart %s' % (' ' * indent, n))
print('%s--------------------' % (' ' * indent))
# 遞歸列印每一個子對象:
print_info(part, indent + 1)
else:
# 郵件對象不是一個MIMEMultipart,
# 就根據content_type判斷:
content_type = msg.get_content_type()
if content_type=='text/plain' or content_type=='text/html':
# 純文本或HTML內容:
content = msg.get_payload(decode=True)
# 要檢測文本編碼:
charset = guess_charset(msg)
if charset:
content = content.decode(charset)
print('%sText: %s' % (' ' * indent, content + '...'))
else:
# 不是文本,作為附件處理:
print('%sAttachment: %s' % (' ' * indent, content_type))
郵件的Subject或者Email中包含的名字都是經過編碼後的str,要正常顯示,就必須decode:
def decode_str(s):
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value
decode_header()返回一個list,因為像Cc、Bcc這樣的欄位可能包含多個郵件地址,所以解析出來的會有多個元素。上面的代碼我們偷了個懶,只取了第一個元素。
文本郵件的內容也是str,還需要檢測編碼,否則,非UTF-8編碼的郵件都無法正常顯示:
def guess_charset(msg):
# 先從msg對象獲取編碼:
charset = msg.get_charset()
if charset is None:
# 如果獲取不到,再從Content-Type欄位獲取:
content_type = msg.get('Content-Type', '').lower()
pos = content_type.find('charset=')
if pos >= 0:
charset = content_type[pos + 8:].strip()
return charset
把上面的代碼整理好,我們就可以來試試收取一封郵件。先往自己的郵箱發一封郵件,然後用瀏覽器登錄郵箱,看看郵件收到沒,如果收到了,我們就來用Python程序把它收到本地:
運行程序,結果如下:
+OK Welcome to coremail Mail Pop3 Server (163coms[...])
Messages: 126. Size: 27228317
From: Test <[email protected]>
To: Python愛好者 <[email protected]>
Subject: 用POP3收取郵件
part 0
--------------------
part 0
--------------------
Text: Python可以使用POP3收取郵件……...
part 1
--------------------
Text: Python可以<a href="...">使用POP3</a>收取郵件……...
part 1
--------------------
Attachment: application/octet-stream
我們從列印的結構可以看出,這封郵件是一個MIMEMultipart,它包含兩部分:第一部分又是一個MIMEMultipart,第二部分是一個附件。而內嵌的MIMEMultipart是一個alternative類型,它包含一個純文本格式的MIMEText和一個HTML格式的MIMEText。
小結
用Python的poplib模塊收取郵件分兩步:第一步是用POP3協議把郵件獲取到本地,第二步是用email模塊把原始郵件解析為Message對象,然後,用適當的形式把郵件內容展示給用戶即可。
『柒』 126郵箱的pop3和smtp是什麼 啊
POP3是Post Office Protocol 3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連接到Internet的郵件伺服器和下載電子郵件的電子協議。它允許用戶從伺服器上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件伺服器上的郵件。
SMTP全稱是Simple Mail Transfer Protocol,即簡單郵件傳輸協議。用於從源地址到目的地址傳輸郵件的規范,通過它來控制郵件的中轉方式,幫助每台計算機在發送或中轉信件時找到下一個目的地。
(7)pop3message緩存擴展閱讀
常用的電子郵件協議有SMTP、POP3、IMAP4,它們都隸屬於TCP/IP協議簇,默認狀態下,分別通過TCP埠25、110和143建立連接。
郵件收發的整個過程大致如下:
(1)發件人調用用戶代理編輯要發送的郵件。
(2)發件人點擊屏幕上的」發送郵件「按鈕,把發送郵件的 工作全部交給用戶代理來完成。用戶代理通過SMTP協議將郵件發送給發送方的郵件伺服器(在這個過程中,用戶代理充當SMTP客戶,而發送方的郵件伺服器則充當SMTP伺服器)。
(3)發送方的郵件伺服器收到用戶代理發來的郵件後,就把收到的郵件臨時存放在郵件緩存隊列中,等待時間成熟的時候再發送到接收方的郵件伺服器(等待時間的長短取決於郵件伺服器的處理能力和隊列中待發送的信件的數量 )。
(4)若現在時機成熟了,發送方的郵件伺服器則向接收方的郵件伺服器發送郵件緩存中的郵件。在發送郵件之前,發送方的郵件伺服器的SMTP客戶與接收方的郵件伺服器的SMTP伺服器需要事先建立TCP連接,之後再將隊列中 的郵件發送出去。值得注意的是,郵件不會在網際網路中的某個中間郵件伺服器落地 。
(5)接收郵件伺服器中的SMTP伺服器進程在收到郵件後,把郵件放入收件人的用戶郵箱中,等待收件人進行讀取。
(6)收件人在打算收信時,就運行PC機中的用戶代理,使用POP3(或IMAP)協議讀取發送給自己的郵件。 注意,在這個過程中,收件人是POP3客戶,而接收郵件伺服器則是POP3客戶,箭頭的方向是從郵件伺服器指向接收用戶,因為這是一個「拉 」的操作 。
『捌』 電子郵件的原理是什麼
電子郵件傳輸的原理為:
1、發信人使用主機上的客戶端軟體編寫好郵件,同時輸入發件人、收件人地址。通過SMTP協議與所屬發送方郵件伺服器建立連接,並將要發送的郵件發送到所屬發送方郵件伺服器。
2、發送方郵件伺服器查看接收郵件的目標地址,如果收件人為本郵件伺服器的用戶,則將郵件保存在收件人的郵箱中。如果收件人不是本郵件伺服器的用戶,則將交由發送方郵件伺服器的SMTP客戶進程處理。
3、發送方郵件伺服器的客戶進程向收件人信箱所屬郵件伺服器發出連接請求,確認後,郵件按SMTP協議的要求傳輸到收件人信箱郵件伺服器。收件人信箱郵件伺服器收到郵件後,將郵件保存到收件人的郵箱中。
4、當收件人想要查看其郵件時,啟動主機上的電子郵件應用軟體,通過POP3取信協議進程向收件人信箱郵件伺服器發出連接請求。
確認後,收件人信箱郵件伺服器上的POP3伺服器進程檢查該用戶郵箱,把郵箱中的郵件按POP3協議的規定傳輸到收信人主機的POP3客戶進程,最終交給收信人主機的電子郵件應用軟體,供用戶查看和管理。
(8)pop3message緩存擴展閱讀:
電子郵件系統採用的是客戶機/伺服器工作模式,整個系統的核心是電子郵件伺服器。電子郵件應用軟體即用戶代理,負責郵件的接收、發送、編輯及列印等。用戶在郵件伺服器上申請的郵箱,用於郵件的存儲與轉發等。
目前電子郵件主要的通信協議有以下幾種:
1、SMTP
SMTP全稱Simple Mail Transfer Protocol,是一種TCP協議支持的提供可靠且有效電子郵件傳輸的應用層協議。SMTP 是建立在 TCP上的一種郵件服務,主要用於傳輸系統之間的郵件信息並提供來信有關的通知。SMTP主要負責底層的郵件系統如何將郵件從一台機器傳至另外一台機器。
2、POP
POP3全稱Post Office Protocol,是把郵件從電子郵箱中傳輸到本地計算機的協議。
3、IMAP
IMAP全稱Internet Message Access Protocol,是POP3的一種替代協議,提供了郵件檢索和郵件處理的新功能,這樣用戶可以完全不必下載郵件正文就可以看到郵件的標題摘要,從郵件客戶端軟體就可以對伺服器上的郵件和文件夾目錄等進行操作。
IMAP協議增強了電子郵件的靈活性,同時也減少了垃圾郵件對本地系統的直接危害,同時相對節省了用戶察看電子郵件的時間。除此之外,IMAP協議可以記憶用戶在離線狀態下對郵件的操作(例如移動郵件,刪除郵件等)在下一次打開網路連接的時候會自動執行。
『玖』 pop3和IMAP的區別
pop3和imap4的區別是:使用pop協議,把伺服器上的郵件下載到本地來處理,任何處理都在本地;是imap4協議,本地的處理實際上是與伺服器哪枯交互後,在伺服器上處理。
POP的全稱是 Post Office Protocol,即郵局協議,用於電子郵件的接收,它使用TCP的110埠;POP是網際網路電子郵件的第一個離線協議標准,POP3允許用戶從伺服器李昌洞上把郵件存儲到本地主機(即自己的計算機)上,同時刪除保存在郵件伺服器上的郵件。
IMAP(Internet Mail Access Protocol,Internet郵件訪問協議)以前稱作交互郵件訪問迅冊協議(Interactive Mail Access Protocol),主要作用是郵件客戶端(例如MS Outlook
Express)可以通過這種協議從郵件伺服器上獲取郵件的信息,下載郵件等,使用的埠是143。
『拾』 哪位大蝦來幫我看看這個javaMail的問題
Session ssession 改為Session session