MailClient.MarkAsRead Method


Changes the read flags of an email on IMAP4/MS Exchange Server. POP3 protocol doesn't support this method

[Visual Basic]
Public Sub MarkAsRead( _
    info As MailInfo, _
    read As Boolean
)
[C#]
public void MarkAsRead(
    MailInfo info,
    bool read
);
[C++]
public: void MarkAsRead(
    MailInfo^ info,
    bool read
);
[JScript]
public function MarkAsRead( 
    info: MailInfo,
    read: Boolean
);

Parameters

info
The MailInfo instance to mark.
read
true to mark the email as read, false to mark the email as unread.

Remarks

You can use MailClient.GetMailInfosParam property to retrieve only unread/new email(s) from server, then use this method to mark the email as read to prevent retrieving the same email again.

Example

[Visual Basic, C#, C++] The following example demonstrates how to retrieve new/unread email and mark it as read to prevent to download same email again, but it doesn't demonstrates the events and mail parsing usage. To get the full samples of EAGetMail, please refer to Samples section.

[VB - Retrieve unread/new emails from IMAP4/MS Exchange Server and mark it as read]
Imports System
Imports System.Globalization
Imports System.IO
Imports System.Text
Imports EAGetMail

Public Class TestClass
    ' Generate an unqiue email file name based on date time.
    Shared Function _generateFileName(ByVal sequence As Integer) As String
        Dim currentDateTime As DateTime = DateTime.Now
        Return String.Format("{0}-{1:000}-{2:000}.eml",
                            currentDateTime.ToString("yyyyMMddHHmmss", New CultureInfo("en-US")),
                            currentDateTime.Millisecond,
                            sequence)
    End Function

    Public Sub ReceiveUnreadMail(server As String, user As String, password As String, useSsl As Boolean)

        Try
            ' Create a folder named "inbox" under current directory
            ' to save the email retrieved.
            Dim localInbox As String = String.Format("{0}\inbox", Directory.GetCurrentDirectory())

            ' If the folder is not existed, create it.
            If Not Directory.Exists(localInbox) Then
                Directory.CreateDirectory(localInbox)
            End If

            ' ExchangeEWS Or ExchangeWebDAV protocol also supports MarkAsRead.
            
            ' Most modern email server require SSL/TLS connection, 
            ' set useSsl to true Is recommended.
            Dim oServer As New MailServer(server, user, password, useSsl,
                        ServerAuthType.AuthLogin, ServerProtocol.Imap4)

            ' IMAP4 port Is 143,  IMAP4 SSL port Is 993.
            ' EWS/WebDAV, please ignore Port property.
            oServer.Port = If(useSsl, 993, 143)

            Console.WriteLine("Connecting server ...")
            Dim oClient As New MailClient("TryIt")
            oClient.Connect(oServer)

            ' retrieve unread/new email only
            oClient.GetMailInfosParam.Reset()
            oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfosOptionType.NewOnly

            Console.WriteLine("Retrieving email list ...")
            Dim infos() As MailInfo = oClient.GetMailInfos()

            Console.WriteLine("Total {0} unread email(s)", infos.Length)

            For i As Integer = 0 To infos.Length - 1
                Console.WriteLine("Checking {0}/{1} ...", i + 1, infos.Length)
                Dim info As MailInfo = infos(i)

                Console.WriteLine("UIDL: {0}", info.UIDL)
                Console.WriteLine("Index: {0}", info.Index)
                Console.WriteLine("Size: {0}", info.Size)
                Console.WriteLine("Read: {0}", info.Read)

                ' Generate an unqiue email file name based on date time.
                Dim fileName As String = _generateFileName(i + 1)
                Dim fullPath As String = String.Format("{0}\{1}", localInbox, fileName)

                Console.WriteLine("Downloading {0}/{1} ...", i + 1, infos.Length)
                Dim oMail As Mail = oClient.GetMail(info)

                ' Save email to local disk
                oMail.SaveAs(fullPath, True)

                ' mark unread email as read, next time this email won't be retrieved again
                If Not info.Read Then
                    Console.WriteLine("Mark email as read" & vbCrLf)
                    oClient.MarkAsRead(info, True)
                End If

                ' if you don't want to leave a copy on server, please use
                ' oClient.Delete(info)
                ' instead of MarkAsRead
            Next

            Console.WriteLine("Disconnecting ...")
            ' Quit and expunge emails marked as deleted from IMAP server.
            oClient.Quit()

            Console.WriteLine("Completed!")
        Catch ep As Exception
            Console.WriteLine("Error: {0}", ep.Message)
        End Try

    End Sub
End Class


[C# - Retrieve unread/new emails from IMAP4/MS Exchange Server and mark it as read] using System; using System.IO; using System.Globalization; using System.Text; using EAGetMail; class TestClass { // Generate an unqiue email file name based on date time static string _generateFileName(int sequence) { DateTime currentDateTime = DateTime.Now; return string.Format("{0}-{1:000}-{2:000}.eml", currentDateTime.ToString("yyyyMMddHHmmss", new CultureInfo("en-US")), currentDateTime.Millisecond, sequence); } public void ReceiveUnreadMail(string server, string user, string password, bool useSsl) { try { // Create a folder named "inbox" under current directory // to save the email retrieved. string localInbox = string.Format("{0}\\inbox", Directory.GetCurrentDirectory()); // If the folder is not existed, create it. if (!Directory.Exists(localInbox)) { Directory.CreateDirectory(localInbox); } // ExchangeEWS Or ExchangeWebDAV protocol also supports MarkAsRead. // Most modern email server require SSL/TLS connection, // set useSsl to true is recommended. MailServer oServer = new MailServer(server, user, password, useSsl, ServerAuthType.AuthLogin, ServerProtocol.Imap4); // IMAP4 port is 143, IMAP4 SSL port is 993. // EWS/WebDAV, please ignore Port property. oServer.Port = (useSsl) ? 993 : 143; Console.WriteLine("Connecting server ..."); MailClient oClient = new MailClient("TryIt"); oClient.Connect(oServer); // retrieve unread/new email only oClient.GetMailInfosParam.Reset(); oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfosOptionType.NewOnly; Console.WriteLine("Retreiving email list ..."); MailInfo[] infos = oClient.GetMailInfos(); Console.WriteLine("Total {0} unread email(s)", infos.Length); for (int i = 0; i < infos.Length; i++) { Console.WriteLine("Checking {0}/{1} ...", i+1, infos.Length); MailInfo info = infos[i]; Console.WriteLine("UIDL: {0}", info.UIDL); Console.WriteLine("Index: {0}", info.Index); Console.WriteLine("Size: {0}", info.Size); Console.WriteLine("Read: {0}", info.Read); Console.WriteLine("Deleted: {0}", info.Deleted); // Generate an unqiue email file name based on date time. string fileName = _generateFileName(i + 1); string fullPath = string.Format("{0}\\{1}", localInbox, fileName); Console.WriteLine("Downloading {0}/{1} ...", i + 1, infos.Length); Mail oMail = oClient.GetMail(info); // mark unread email as read, next time this email won't be retrieved again if(!info.Read) { Console.WriteLine("Mark email as read\r\n"); oClient.MarkAsRead(info, true); } // if you don't want to leave a copy on server, please use // oClient.Delete(info); // instead of MarkAsRead } Console.WriteLine("Disconnecting ..."); // Delete method just mark the email as deleted, // Quit method expunge the emails from server permanently. oClient.Quit(); Console.WriteLine("Completed!"); } catch (Exception ep) { Console.WriteLine("Error: {0}", ep.Message); } } }
[C++/CLI - Retrieve unread/new emails from IMAP4/MS Exchange Server and mark it as read] using namespace System; using namespace System::Globalization; using namespace System::IO; using namespace EAGetMail; //add EAGetMail namespace // Generate an unqiue email file name based on date time static String ^ _generateFileName(int sequence) { DateTime currentDateTime = DateTime::Now; return String::Format("{0}-{1:000}-{2:000}.eml", currentDateTime.ToString("yyyyMMddHHmmss", gcnew CultureInfo("en-US")), currentDateTime.Millisecond, sequence); } void ReceiveUnreadMail(String ^server, String ^user, String ^password, bool useSsl) { try { // Create a folder named "inbox" under current directory // to save the email retrieved. String ^localInbox = String::Format("{0}\\inbox", Directory::GetCurrentDirectory()); // If the folder is not existed, create it. if (!Directory::Exists(localInbox)) { Directory::CreateDirectory(localInbox); } // ExchangeEWS Or ExchangeWebDAV protocol also supports MarkAsRead. // Most modern email server require SSL/TLS connection, // set useSsl to true is recommended. MailServer ^oServer = gcnew MailServer(server, user, password, useSsl, ServerAuthType::AuthLogin, ServerProtocol::Imap4); // IMAP4 port is 143, IMAP4 SSL port is 993. // EWS/WebDAV, please ignore Port property. oServer->Port = (useSsl) ? 993 : 143; Console::WriteLine("Connecting server ..."); MailClient ^oClient = gcnew MailClient("TryIt"); oClient->Connect(oServer); // retrieve unread/new email only oClient->GetMailInfosParam->Reset(); oClient->GetMailInfosParam->GetMailInfosOptions = GetMailInfosOptionType::NewOnly; Console::WriteLine("Retreiving email list ..."); array<MailInfo^>^infos = oClient->GetMailInfos(); Console::WriteLine("Total {0} unread email(s)", infos->Length); for (int i = 0; i < infos->Length; i++) { Console::WriteLine("Checking {0}/{1}", i + 1, infos->Length); MailInfo ^info = infos[i]; Console::WriteLine("UIDL: {0}", info->UIDL); Console::WriteLine("Index: {0}", info->Index); Console::WriteLine("Size: {0}", info->Size); Console::WriteLine("Read: {0}", info->Read); Console::WriteLine("Deleted: {0}", info->Deleted); // Generate an unqiue email file name based on date time String^ fileName = _generateFileName(i + 1); String^ fullPath = String::Format("{0}\\{1}", localInbox, fileName); Console::WriteLine("Downloading {0}/{1}", i + 1, infos->Length); Mail ^oMail = oClient->GetMail(info); // Save email to local disk oMail->SaveAs(fullPath, true); // mark unread email as read, next time this email won't be retrieved again if (!info->Read) { Console::WriteLine("Mark email as read\r\n"); oClient->MarkAsRead(info, true); } // if you don't want to leave a copy on server, please use // oClient->Delete(info); // instead of MarkAsRead } Console::WriteLine("Disconnecting ..."); // Delete method just mark the email as deleted, // Quit method expunge the emails from server permanently. oClient->Quit(); Console::WriteLine("Completed!"); } catch (Exception ^ep) { Console::WriteLine("Error: {0}", ep->Message); } }