2009-10-07 2 views
4

Я пробовал это на C#, используя проект с открытым исходным кодом под названием «Koolwired.Imap» на sourceforge.IMAP on C# - Загрузить письма и приложения

Это было нормально при загрузке писем, но для вложений это только список имени файла вложения. Кто-нибудь пробовал это?

Если не существует какой-либо другой более свободная библиотека, которая может сделать то же самое (я нужен свободный/решение с открытым исходным кодом для этого, потому что я делаю это для моего университетского городка проекта)

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

и не делите ваши данные в контакте с людьми :) –

+0

это тестовая учетная запись .. никаких проблем .. Спасибо за напоминание .. –

+0

как я могу запустить этот код? Он работает для загрузки писем только из учетной записи gmail? Возможно ли конвертировать загруженные файлы после загрузки? – Nicholas

ответ

1

Мой выбор проект interimap на codeplex. Он отлично справляется с приложениями.

-1

Если вы хотите использовать его на короткий период, используйте API-интерфейс chilkat IMAP. вы можете сохранить всю электронную почту в виде файла eml и получить достаточное количество проб для запуска любого пользователя. Это он полностью функционален в течение месяца бесплатно, после чего его оплаченного

Одновременно вы хотите скачать отдельно вложения с 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] никогда не читает последнего сообщения.