3 Stimmen

IMAP in C# - E-Mails und Anhänge herunterladen

Ich habe dies in C# mit einem Open-Source-Projekt namens "Koolwired.Imap" auf sourceforge ausprobiert.

Es hat gut funktioniert beim Herunterladen von E-Mails, aber bei Anhängen wird nur der Dateiname des Anhangs aufgelistet. Hat das schon mal jemand versucht?

Falls nicht, gibt es eine andere bessere kostenlose Bibliothek, die dasselbe kann (ich brauche eine kostenlose/open-source Lösung dafür, da ich dies für mein Campusprojekt mache)

ImapConnect connection = new ImapConnect("imap.gmail.com", 993, true);
ImapCommand command = new ImapCommand(connection);
ImapAuthenticate auth = new ImapAuthenticate(connection, "@gmail.com", "");
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();

2 Stimmen

Und geben Sie Ihre Anmeldedaten nicht weiter :)

0 Stimmen

Es handelt sich um ein Testkonto .. kein Problem .. Danke für die Erinnerung..

0 Stimmen

Wie kann ich diesen Code ausführen? Funktioniert es nur für das Herunterladen von E-Mails aus einem Gmail-Konto? Ist es möglich, die heruntergeladenen Dateien nach dem Download zu konvertieren?

1voto

Nisus Punkte 776

Meine Wahl ist ein interimap Projekt auf Codeplex. Es behandelt Anhänge perfekt.

1voto

Rajdip Punkte 35

Ich habe dies verwendet, um Anhänge aus EML-Dateien zu lesen. http://www.codeproject.com/KB/cs/mime_project.aspx?msg=3455831#xx3455831xx

0voto

Camila Cardoso Punkte 1

Wo du schreibst

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

Du kannst ImapMailboxMessage msg = mailbox.Messages[i]; verwenden

für bessere Ergebnisse, wenn Sie mehr als eine E-Mail im ausgewählten Ordner haben.

Die [mailCount - 1] wird nie die letzte Nachricht lesen.

-1voto

Vicky Biswas Punkte 1

Wenn Sie es für einen kurzen Zeitraum verwenden möchten, verwenden Sie bitte die Chilkat IMAP-API. Sie können die gesamte E-Mail als EML-Datei speichern und es gibt genügend Beispiele, um jeden zum Laufen zu bringen. Es ist einen Monat lang voll funktionsfähig, danach ist es kostenpflichtig

Wenn Sie gleichzeitig Anhänge separat herunterladen möchten, verwenden Sie coolwired folgendes

ImapMailboxMessage mbStructure = new ImapMailboxMessage();
mbStructure = command.FetchBodyStructure(a);
for (int j = 0; j < a.BodyParts.Count; j++)
{
 //Verzeichnis erstellen, wenn es nicht vorhanden ist
 if (!Directory.Exists(path))
 {
    DirectoryInfo di = Directory.CreateDirectory(path);
 }
 if (mbStructure.BodyParts[j].Attachment)
 {
    //Anhang
    command.FetchBodyPart(mbStructure, mbStructure.BodyParts.IndexOf(mbStructure.BodyParts[j]));
    //Binäre Datei schreiben
    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();
 }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X