網絡協議研究(三)IMAP
IMAP(Internet Message Access Protocol,因特網郵件讀取協議)是一個應用層協議,用來從本地郵件客戶端訪問遠程服務器上的郵件。
IMAP和POP3是郵件訪問最為普遍的Internet標準協議。事實上絕大多數現代的郵件客戶端和服務器都對兩者給予支持。IMAP現在的版本是"IMAP第四版第一次修訂版"(IMAP4rev1),在RFC3501中定義。
相對于POP3,IMAP提供了一些重要的功能:
1、支持連接和斷開兩種操作模式。
2、支持多個客戶同時連接到一個郵箱。
3、支持訪問消息中的MIME部分和部分獲取。
4、支持在服務器保留消息狀態信息。
5、支持在服務器上訪問多個郵箱。
6、支持服務器端搜索。
7、支持一個定義良好的擴展機制。
不像大多數舊的Internet協議,IMAP4原生支持加密注冊機制。IMAP4中也支持明文傳輸密碼。因為加密機制的使用需要客戶端和服務器雙方的一致,明文密碼的使用是在在一些客戶端和服務器類型不同的情況下(例如Microsoft Windows客戶端和非Windows服務器)。使用SSL也可以對IMAP4的通信進行加密,通過將在SSL上的IMAP4通信通過993端口傳輸或者在IMAP4線程創建的時候聲明 " " "、"STARTTLS"。
IMAP4使用端口143在TCP/IP連接上工作。
.NET 框架中沒有封裝IMAP的相關操作,故繼續使用第三方組件LumiSoft.Net。
LumiSoft.Net是一個開源的組件,實現了很多協議,源代碼是學習網絡協議的不錯的參考資料。
測試代碼:
{
IMAP_Client client = new IMAP_Client();
FileStream log = new FileStream(@"C:\log.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(log);
try
{
//連接郵件服務器通過傳入郵件服務器地址和用于IMAP協議的端口號
client.Connect("imap.gmail.com", 993, true);
client.Login("mymbrooks", "******");
IMAP_Client_FetchHandler fetchHandler = new IMAP_Client_FetchHandler();
fetchHandler.Rfc822 += new EventHandler<IMAP_Client_Fetch_Rfc822_EArgs>(delegate(object s, IMAP_Client_Fetch_Rfc822_EArgs e)
{
MemoryStream storeStream = new MemoryStream();
e.Stream = storeStream;
e.StoringCompleted += new EventHandler(delegate(object s1, EventArgs e1)
{
storeStream.Position = 0;
Mail_Message mime = Mail_Message.ParseFromStream(storeStream);
sw.WriteLine(mime.BodyText);
});
});
//獲取郵件
IMAP_SequenceSet seqSet = new IMAP_SequenceSet();
seqSet.Parse("1:*");
IMAP_r_u_List[] list = client.GetFolders(null);
foreach (IMAP_r_u_List l in list)
{
client.SelectFolder(l.FolderName);
client.Fetch(
true,
seqSet,
new IMAP_Fetch_DataItem[]{
new IMAP_Fetch_DataItem_Rfc822()
},
fetchHandler
);
}
}
catch
{
}
finally
{
sw.Flush();
sw.Close();
log.Close();
}
}
我將Gmail中的郵件寫入到了C:\log.txt文件里:
hMail Server 配置
hMail Server 是Windows下的一款免費郵件服務器,支持SMTP、POP3、IMAP協議,官方主頁:http://www.hmailserver.com/
我使用的是最新測試版:hMailServer 5.3.4 - 1913
支持SQL Server、MySQL、PgSQL數據庫,安裝時需要注意一下,SQL Server很簡單,若使用的MySQL,需要將MySQL x86 lib目錄下的一個dll復制過去,PgSQL 我在Windows Server 2008 R2 SP1上無法安裝成功,有點bug。
首先添加一個domain:
由于只是測試,我使用了127.0.0.1,添加了兩個測試賬戶:user1@127.0.0.1、user2@127.0.0.1。
配置一下 SMTP、POP3、IMAP協議:
其他選項默認即可,可擴展性很強,可以配置訪問規則、DNS、反病毒、日志等,功能很強大。結合DNS服務器完全可以當做一個小型的企業級郵件服務器使用。
配置好了服務端,下面配置一下客戶端,我用的ThunderBird:
將剛才設置的user1、user2添加進來:
發送郵件試試:
可以看到,順利收到了郵件:
小結:
IMAP是目前獲取郵件的事實上的標準,絕大多數郵件服務提供商均支持加密的IMAP服務,建議在工作生活中使用IMAP(SSL、TLS)來收取郵件。LumiSoft.Net提供了大量封裝好的組件,很有研究價值,有興趣的朋友可以深入研究。最后簡單介紹了下hMail Server的安裝與配置,在Windows下可以快速的搭建一個小型的企業級郵件服務器,給很多中小企業帶來了福音。

浙公網安備 33010602011771號