ImapX - невозможно перезаписать письмо с помощью Message.Download () - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу получить заголовки писем из почтового ящика, а затем полностью перезагружать некоторые письма:

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 Ответ

0 голосов
/ 18 декабря 2018

Звучит так, как вы хотите - msg.DownloadRawMessage ();, однако возвращает строку и не заполняет существующую структуру Message, поэтому вам придется выполнить:

msg = Message.FromEml (msg.DownloadRawMessage ());
...