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 ());
Другие вопросы по тегам