3

我正在使用 ImapX 阅读 Gmail 电子邮件帐户,阅读后,我想将它们标记为“已读”据我了解,其他人已经成功:

ImapX.FolderCollection folders = imapclient.Folders;
ImapX.MessageCollection messages = imapclient.Folders["INBOX"].Search("UNSEEN", true); 
foreach (var mess in messages)
{
 mess.Process(); 
}

但 Gmail 并没有“将这些邮件标记为已读”。对我所缺少的有任何见解吗?

4

2 回答 2

1

首先,如果您使用的是旧的 ImapX 库,我邀请您升级到ImapX 2。它正在不断地开发和支持。还有所有常见操作的示例代码。

消息的Process方法不会将消息标记为已读,它只会下载包括附件在内的整个消息。在您的情况下,如果您调用将Search第二个参数设置为的方法true,则不必为每条消息都调用它。

要将消息标记为已读,只需使用AddFlagMessage 的方法:

ImapX.Collections.FolderCollection folders = imapclient.Folders;
ImapX.Collections.MessageCollection messages = imapclient.Folders["INBOX"].Search("UNSEEN", true); 
foreach (var mess in messages)
{
    mess.AddFlag(ImapX.Flags.MessageFlags.Seen); 
}
于 2013-07-09T20:32:58.497 回答
0

我用 imapx 库(ver1 旧版本)尝试了这段代码,它很正常,只下载看不见的电子邮件,然后将其设置为“可见”。您还可以在电子邮件中查看这些活动的状态。注意您必须打开 imapx 协议(gmail 设置),然后转到 google 帐户/启用 2 短信验证/获取应用程序密码才能连接

Dim client As New ImapX.ImapClient("imap.gmail.com", 993, True)
    Dim result As Boolean = client.Connection()
    If result Then
        result = client.LogIn("id@gmail.com", "gmail password")
        If result Then
            MessageBox.Show("Log on successful", "Status...", MessageBoxButtons.OK, MessageBoxIcon.Information)
            MessageBox.Show("Please wait for some minutes...", "Status...", MessageBoxButtons.OK, MessageBoxIcon.Information)


            For Each m As ImapX.Message In client.Folders("INBOX").Search("UNSEEN", True)


                If check_stop_read_email = True Then
                    client.LogOut()
                    check_stop_read_email = False
                    Exit For
                End If

                Threading.Thread.Sleep(1000)
                DoEvents()

                Try
                    m.Process()
                Catch ex As Exception
                    Continue For
                End Try

                'Email content is m.HtmlBody.TextData
                'Subject is m.Subject


                m.SetFlag(ImapX.ImapFlags.SEEN)
                DoEvents()

            Next
            client.LogOut()
            MessageBox.Show("Done!")
        Else
            MessageBox.Show("Wrong username or password", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    Else
        MessageBox.Show("Connection_Failed", "Error...", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If
于 2020-08-23T09:48:37.667 回答