imapX помечает сообщение как прочитанное в Gmail?

Я использую ImapX для чтения учетной записи электронной почты Gmail, и после прочтения я хотел бы пометить их как "прочитанные". Насколько я понимаю, другие добились успеха:

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

Но Gmail не "помечает эти сообщения как прочитанные". Любое понимание того, что мне не хватает?

1 ответ

Прежде всего, если вы используете старую библиотеку ImapX, я приглашаю вас перейти на ImapX 2. Это постоянно развивается и поддерживается. Существует также пример кода для всех распространенных операций.

Process Метод сообщения не помечает сообщение как прочитанное, он загружает только все сообщение, включая вложения. В вашем случае, если вы позвоните Search метод установки второго параметра в trueВам не нужно вызывать его для каждого отдельного сообщения.

Чтобы пометить сообщение как прочитанное, просто используйте AddFlag Метод сообщения:

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); 
}

Я пробовал этот код с библиотекой imapx (старая версия ver1), и все нормально, загружайте только невидимые электронные письма, а затем устанавливайте его "видимым". вы также проверяете состояние этих действий в своем электронном письме. NOticeL вам нужно включить протокол imapx (настройка gmail) и перейти в учетную запись google / включить аутентификацию 2 sms / получить пароль приложения для подключения

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