I want to get headers of letters from mailbox and then redownload some letters completely:
static void Main(string[] args)
{
using (ImapX.ImapClient imap = new ImapX.ImapClient("imap.gmail.com", 993, true))
{
if (imap.Connect())
{
imap.Login("***************", "***************");
imap.Behavior.MessageFetchMode = ImapX.Enums.MessageFetchMode.Headers;
foreach (ImapX.Folder folder in imap.Folders)
refreshFolder(folder);
ImapX.Message msg = imap.Folders["INBOX"].Messages[0];
msg.Download(ImapX.Enums.MessageFetchMode.Full, true);
}
}
}
static void refreshFolder(ImapX.Folder folder)
{
foreach (ImapX.Folder subfolder in folder.SubFolders)
refreshFolder(subfolder);
if (folder.Selectable)
folder.Messages.Download();
}
The code above doesn't do what I need - msg
still has no anything and even lost headers after msg.Download(ImapX.Enums.MessageFetchMode.Full, true)
. Now I realized it tried to get data from folder I've last downloaded and it was empty.
However I managed to get full letter when not downloading messages from other folders:
static void Main(string[] args)
{
using (ImapX.ImapClient imap = new ImapX.ImapClient("imap.gmail.com", 993, true))
{
if (imap.Connect())
{
imap.Login("***************", "***************");
imap.Behavior.MessageFetchMode = ImapX.Enums.MessageFetchMode.Headers;
/*foreach (ImapX.Folder folder in imap.Folders)
refreshFolder(folder);*/
imap.Folders["INBOX"].Messages.Download();
ImapX.Message msg = imap.Folders["INBOX"].Messages[0];
msg.Download(ImapX.Enums.MessageFetchMode.Full, true);
}
}
}
I really see no reason to remember what folder contains specific letter because I just have Message
object. How to get the rest of letter?
It sounds like what you want is
msg.DownloadRawMessage ();
, however, it returns a string and does not populate the existingMessage
structure, so you'll have to do: