ImapX - невозможно перезаписать письмо с помощью Message.Download()
Я хочу получить заголовки писем из почтового ящика, а затем полностью перезагружать некоторые письма:
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();
}
Код выше не делает то, что мне нужно - msg
до сих пор ничего не имеет и даже потерял заголовки после msg.Download(ImapX.Enums.MessageFetchMode.Full, true)
, Теперь я понял, что он пытался получить данные из папки, которую я недавно скачал, и она была пустой.
Однако мне удалось получить полное письмо, когда не загружал сообщения из других папок:
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);
}
}
}
Я действительно не вижу причин вспоминать, в какой папке содержится конкретное письмо, потому что у меня просто есть Message
объект. Как получить остаток письма?
1 ответ
Похоже, что вы хотите msg.DownloadRawMessage ();
однако он возвращает строку и не заполняет существующий Message
структура, так что вам придется сделать:
msg = Message.FromEml (msg.DownloadRawMessage ());