2009-10-07 7 views
4

J'ai essayé ceci sur C# en utilisant le projet open source appelé "Koolwired.Imap" sur sourceforge. Il était OK lors du téléchargement de mails, mais pour les pièces jointes, il est seulement la liste du nom de fichier de la pièce jointe. Y a-t-il quelqu'un qui a essayé cela?IMAP on C# - Télécharger les Mails et les pièces jointes

Dans le cas contraire est-il une autre meilleure bibliothèque libre qui peut faire la même chose (je besoin d'une solution libre/open source pour cela, parce que je fais cela pour mon projet sur le campus)

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

et ne pas partager vos informations de connexion avec les gens :) –

+0

c'est un compte de test .. pas de problème .. Merci de rappeler .. –

+0

comment puis-je exécuter ce code? Est-ce que cela fonctionne pour le téléchargement de mails uniquement à partir d'un compte Gmail? Est-il possible de convertir les fichiers téléchargés après le téléchargement? – Nicholas

Répondre

1

Mon choix est un projet interimap sur codeplex. Il traite parfaitement des pièces jointes.

-1

Si vous souhaitez l'utiliser pendant une courte période, utilisez l'API IMAP chilkat. vous pouvez enregistrer l'intégralité de l'e-mail sous forme de fichier eml et il y a suffisamment d'exemples pour que tout le monde puisse s'exécuter. Il iT entièrement fonctionnel pour un mois gratuit, après quoi le même temps payé

vous voulez télécharger des pièces jointes Séparément avec l'utilisation coolwired les éléments suivants

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

Si vous écrivez

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

Vous pouvez utiliser ImapMailboxMessage msg = mailbox.Messages[i];

pour de meilleures œuvres lorsque vous avez plus d'un e-mail dans le dossier sélectionné. Le [mailCount -1] ne lit jamais le dernier message.

Questions connexes