2009-10-07 93 views
4

我已經在C#上使用了sourceforge上名爲「Koolwired.Imap」的開源項目嘗試了這一點。C#上的IMAP - 下載郵件和附件

下載郵件時可以,但附件只列出附件的文件名。有沒有人試過這個?

如果不是有沒有其他更好的免費庫,可以做同樣的(我需要這樣的自由/開源的解決方案,因爲我這樣做對我的校園項目)

ImapConnect connection = new ImapConnect("imap.gmail.com", 993, true); 
ImapCommand command = new ImapCommand(connection); 
ImapAuthenticate auth = new ImapAuthenticate(connection, "<username>@gmail.com", "<password>"); 
connection.Open(); 
auth.Login(); 

string htmlbody = ""; 
ImapMailbox mailbox = command.Select("INBOX"); 
mailbox = command.Fetch(mailbox); 
int mailCount = mailbox.Messages.Count; 

for (int i = 0; i < mailCount ; i++) 
{ 
ImapMailboxMessage msg = mailbox.Messages[mailCount - 1]; 
msg = command.FetchBodyStructure(msg); 

msg.BodyParts[0].ContentEncoding = BodyPartEncoding.NONE; 
msg = command.FetchBodyPart(msg, msg.HTML); 

foreach (ImapMessageBodyPart a in msg.BodyParts) 
{ 
    if (a.Data != null) 
    { 
     string fileName = ""; 

     if (a.Attachment) fileName = ParseFileName(a.Disposition); 
      string mimeType = a.ContentType.MediaType.ToLower(); 

     a.ContentEncoding = BodyPartEncoding.UTF7; 
     htmlbody = a.Data; 
    } 
} 
} 

auth.Logout(); 
connection.Close(); 
+1

而且不會與人分享您的詳細日誌:) – 2010-07-01 12:20:15

+0

它是一個測試帳戶..沒有問題..謝謝您提醒.. – 2011-03-31 08:41:28

+0

我該如何運行此代碼?它只適用於從Gmail帳戶下載郵件嗎?下載後可以轉換下載的文件嗎? – Nicholas 2012-02-29 22:28:44

回答

1

我的選擇是codeplex上的interimap項目。它完美處理附件。

-1

如果您想短時間使用它,請使用chilkat IMAP API。您可以將整個電子郵件保存爲eml文件,並有足夠的樣本來讓任何人運行。 它,它功能齊全的一個月免費之後,其支付

同時要seperately下載附件與coolwired使用以下

ImapMailboxMessage mbStructure = new ImapMailboxMessage(); 
mbStructure = command.FetchBodyStructure(a); 
for (int j = 0; j < a.BodyParts.Count; j++) 
{ 
//create dir if doesnot exist 
if (!Directory.Exists(path)) 
{ 
    DirectoryInfo di = Directory.CreateDirectory(path); 
} 
if (mbStructure.BodyParts[j].Attachment) 
{ 
    //Attachment 
    command.FetchBodyPart(mbStructure, mbStructure.BodyParts.IndexOf(mbStructure.BodyParts[j])); 
    //Write Binary File 
    FileStream fs = new FileStream(path + mbStructure.BodyParts[j].FileName, FileMode.Create); 
    fs.Write(mbStructure.BodyParts[j].DataBinary, 0, (int)mbStructure.BodyParts[j].DataBinary.Length); 
    fs.Flush(); 
    fs.Close(); 
} 
}         
0

你寫

ImapMailboxMessage msg = mailbox.Messages[mailCount - 1]; 

您可以使用ImapMailboxMessage msg = mailbox.Messages[i];

爲更好的作品時,你有選擇的文件夾中的多個電子郵件。

[mailCount -1]永遠不會讀取最後一條消息。