IMAP на C # - скачать почту и вложения - PullRequest
4 голосов
/ 07 октября 2009

Я пробовал это на C #, используя проект с открытым исходным кодом под названием "Koolwired.Imap" на sourceforge.

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

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

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();

Ответы [ 5 ]

1 голос
/ 29 апреля 2010

Я использовал это, чтобы прочитать вложение из файлов eml. http://www.codeproject.com/KB/cs/mime_project.aspx?msg=3455831#xx3455831xx

1 голос
/ 08 октября 2009

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

0 голосов
/ 07 ноября 2016

Где вы пишете

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

Вы можете использовать ImapMailboxMessage msg = mailbox.Messages[i];

для лучшей работы, когда в выбранной папке несколько писем.

[mailCount -1] никогда не читает последнее сообщение.

0 голосов
/ 22 сентября 2010

ImapX - лучшая библиотека. Отлично работает с GMail. Очень простой в использовании.

http://hellowebapps.com/products/imapx/

0 голосов
/ 29 декабря 2009

Если вы хотите использовать его в течение короткого периода времени, используйте 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();
 }
}                                  
...