首页 > 解决方案 > 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对象。如何获得剩余的信件?

标签: c#.netemailimapimapx

解决方案


听起来您想要的是msg.DownloadRawMessage ();,但是,它返回一个字符串并且不填充现有Message结构,因此您必须这样做:

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

推荐阅读