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