MailInfo.Read Property


Gets read flag of the email on IMAP4/Exchange server. This property is meaningless for the email with POP3 protocol.

[Visual Basic 6.0]
Public Property Get Read() As Boolean
[Visual C++]
public: get_Read(VARIANT_BOOL* pVal);

Property Value

A bool value indicating the email is read on server.

Remarks

By default, GetMailInfoList method returns all emails in "INBOX". You can use SelectFolder method to retrieve email list in selected folder.

GetMailInfosParam property can set some filters for returned email list on server.

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

Example

[Visual Basic 6.0, VBScript, Visual C++, Delphi] The following example demonstrates how to mark every read email as unread with EAGetMail POP3 & IMAP Component. To get the full samples of EAGetMail, please refer to Samples section.

[Visual Basic 6.0]
Public Sub ReceiveMail( _
ByVal sServer As String, _
ByVal sUserName As String, _
ByVal sPassword As String, _
ByVal bSSLConnection As Boolean)
    
    Const MailServerPop3 = 0
    Const MailServerImap4 = 1
    Const MailServerEWS = 2
    Const MailServerDAV = 3

    Const GetMailInfos_All = 1
    Const GetMailInfos_NewOnly = 2
    Const GetMailInfos_ReadOnly = 4
    Const GetMailInfos_SeqRange = 8
    Const GetMailInfos_UIDRange = 16
    Const GetMailInfos_PR_ENTRYID = 32
    Const GetMailInfos_DateRange = 64
    Const GetMailInfos_OrderByDateTime = 128

    'For evaluation usage, please use "TryIt" as the license code, otherwise the
    '"invalid license code" exception will be thrown. However, the object will expire in 1-2 months, then
    '"trial version expired" exception will be thrown.
    Dim oClient As New EAGetMailObjLib.MailClient
    oClient.LicenseCode = "TryIt"
    
    'To receive email with Exchange Web Service, please change
    'MailServerImap4 to MailServerEWS to MailServer.Protocol

    'To receive email with Exchange WebDAV, please change
    'MailServerImap4 to MailServerDAV to MailServer.Protocol

    'Exchange Server supports POP3/IMAP4 protocol as well, but in Exchange 2007
    'or later version, POP3/IMAP4 service is disabled by default. If you don't want to use POP3/IMAP4
    'to download email from Exchange Server, you can use Exchange Web Service(Exchange 2007/2010 or
    'later version) or WebDAV(Exchange 2000/2003) protocol.

    'For Exchange Web Service/WebDAV, please ignore 
    'Port property. But for Exchange Web Service, please set SSLConnection to True

    Dim oServer As New EAGetMailObjLib.MailServer
    oServer.Server = sServer
    oServer.User = sUserName
    oServer.Password = sPassword
    oServer.SSLConnection = bSSLConnection
    oServer.Protocol = MailServerImap4
    
    ''by default, the pop3 port is 110, imap4 port is 143,
    'the pop3 ssl port is 995, imap4 ssl port is 993
    'you can also change the port like this
    'oServer.Port = 110
    If oServer.Protocol = MailServerImap4 Then
        If oServer.SSLConnection Then
            oServer.Port = 993 'SSL IMAP4
        Else
            oServer.Port = 143 'IMAP4 normal
        End If
    Else
        If oServer.SSLConnection Then
            oServer.Port = 995 'SSL POP3
        Else
            oServer.Port = 110 'POP3 normal
        End If
    End If
    
On Error GoTo ErrorHandle
    oClient.Connect oServer

    ' retrieve unread email only
    oClient.GetMailInfosParam.Reset
    oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfos_NewOnly
    
    Dim infos As EAGetMailObjLib.MailInfoCollection
    Set infos = oClient.GetMailInfoList()
    
    Dim i
    For i = 0 To infos.Count - 1
        Dim info As EAGetMailObjLib.MailInfo
        Set info = infos.Item(i)
        
        MsgBox "UIDL: " & info.UIDL
        MsgBox "Index: " & info.Index
        MsgBox "Size: " & info.Size
        'For POP3/Exchange Web Service/WebDAV, the IMAP4MailFlags is meaningless.
        MsgBox "Flags: " & info.IMAP4Flags 
        'For POP3, the Read is meaningless.
        MsgBox "Read: " & info.Read
        MsgBox "Deleted: " & info.Deleted

        ' mark unread email as read, next time this email won't be retrieved again         
        If Not info.Read Then
            oClient.MarkAsRead info, True
        End If 
    Next

    oClient.Logout
    Exit Sub

ErrorHandle:
    ''Error handle
    MsgBox Err.Description
    
    oClient.Close
End Sub


[VBScript] Sub ReceiveMail( _ ByVal sServer, _ ByVal sUserName, _ ByVal sPassword, _ ByVal bSSLConnection) Const MailServerPop3 = 0 Const MailServerImap4 = 1 Const MailServerEWS = 2 Const MailServerDAV = 3 Const GetMailInfos_All = 1 Const GetMailInfos_NewOnly = 2 Const GetMailInfos_ReadOnly = 4 Const GetMailInfos_SeqRange = 8 Const GetMailInfos_UIDRange = 16 Const GetMailInfos_PR_ENTRYID = 32 Const GetMailInfos_DateRange = 64 Const GetMailInfos_OrderByDateTime = 128 'For evaluation usage, please use "TryIt" as the license code, otherwise the '"invalid license code" exception will be thrown. However, the object will expire in 1-2 months, then '"trial version expired" exception will be thrown. Dim oClient Set oClient = CreateObject("EAGetMailObj.MailClient") oClient.LicenseCode = "TryIt" 'To receive email with Exchange Web Service, please change 'MailServerImap4 to MailServerEWS to MailServer.Protocol 'To receive email with Exchange WebDAV, please change 'MailServerImap4 to MailServerDAV to MailServer.Protocol 'Exchange Server supports POP3/IMAP4 protocol as well, but in Exchange 2007 'or later version, POP3/IMAP4 service is disabled by default. If you don't want to use POP3/IMAP4 'to download email from Exchange Server, you can use Exchange Web Service(Exchange 2007/2010 or 'later version) or WebDAV(Exchange 2000/2003) protocol. 'For Exchange Web Service/WebDAV, please ignore 'Port property. But for Exchange Web Service, please set SSLConnection to True Dim oServer Set oServer = CreateObject("EAGetMailObj.MailServer") oServer.Server = sServer oServer.User = sUserName oServer.Password = sPassword oServer.SSLConnection = bSSLConnection oServer.Protocol = MailServerImap4 ''by default, the pop3 port is 110, imap4 port is 143, 'the pop3 ssl port is 995, imap4 ssl port is 993 'you can also change the port like this 'oServer.Port = 110 If oServer.Protocol = MailServerImap4 Then If oServer.SSLConnection Then oServer.Port = 993 'SSL IMAP4 Else oServer.Port = 143 'IMAP4 normal End If Else If oServer.SSLConnection Then oServer.Port = 995 'SSL POP3 Else oServer.Port = 110 'POP3 normal End If End If oClient.Connect oServer ' retrieve unread email only oClient.GetMailInfosParam.Reset oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfos_NewOnly Dim infos Set infos = oClient.GetMailInfoList() Dim i For i = 0 To infos.Count - 1 Dim info Set info = infos.Item(i) MsgBox "UIDL: " & info.UIDL MsgBox "Index: " & info.Index MsgBox "Size: " & info.Size 'For POP3/Exchange Web Service/WebDAV, the IMAP4MailFlags is meaningless. MsgBox "Flags: " & info.IMAP4Flags 'For POP3, the Read is meaningless. MsgBox "Read: " & info.Read MsgBox "Deleted: " & info.Deleted ' mark unread email as read, next time this email won't be retrieved again If Not info.Read Then oClient.MarkAsRead info, True End If Next oClient.Logout End Sub
[Visual C++] #include "stdafx.h" #include <windows.h> #include "eagetmailobj.tlh" using namespace EAGetMailObjLib; void ReceiveMail( LPCTSTR sServer, LPCTSTR sUserName, LPCTSTR sPassword, bool bSSLConnection) { ::CoInitialize(NULL); const int MailServerPop3 = 0; const int MailServerImap4 = 1; const int MailServerEWS = 2; const int MailServerDAV = 3; const int GetMailInfos_All = 1; const int GetMailInfos_NewOnly = 2; const int GetMailInfos_ReadOnly = 4; const int GetMailInfos_SeqRange = 8; const int GetMailInfos_UIDRange = 16; const int GetMailInfos_PR_ENTRYID = 32; const int GetMailInfos_DateRange = 64; const int GetMailInfos_OrderByDateTime = 128; try { IMailClientPtr oClient; oClient.CreateInstance(__uuidof(EAGetMailObjLib::MailClient)); IMailServerPtr oServer; oServer.CreateInstance(__uuidof(EAGetMailObjLib::MailServer)); // For evaluation usage, please use "TryIt" as the license code, otherwise the // "invalid license code" exception will be thrown. However, the object will expire in 1-2 months, then // "trial version expired" exception will be thrown. oClient->LicenseCode = _T("TryIt"); oServer->Server = sServer; oServer->User = sUserName; oServer->Password = sPassword; INT nProtocol = MailServerImap4; //To receive email with Exchange Web Service, please change //MailServerImap4 to MailServerEWS to MailServer.Protocol //To receive email with Exchange WebDAV, please change //MailServerImap4 to MailServerDAV to MailServer.Protocol //Exchange Server supports POP3/IMAP4 protocol as well, but in Exchange 2007 //or later version, POP3/IMAP4 service is disabled by default. If you don't want to use POP3/IMAP4 //to download email from Exchange Server, you can use Exchange Web Service(Exchange 2007/2010 or //later version) or WebDAV(Exchange 2000/2003) protocol. //For Exchange Web Service/WebDAV, please ignore //Port property. But for Exchange Web Service, please set SSLConnection to True oServer->Protocol = nProtocol; if(nProtocol == MailServerPop3) { if(bSSLConnection) { oServer->Port = 995; oServer->SSLConnection = VARIANT_TRUE; } else { oServer->Port = 110; } } else { if(bSSLConnection) { oServer->Port = 993; oServer->SSLConnection = VARIANT_TRUE; } else { oServer->Port = 143; } } oClient->Connect(oServer); // retrieve unread email only oClient->GetMailInfosParam->Reset(); oClient->GetMailInfosParam->GetMailInfosOptions = GetMailInfos_NewOnly; IMailInfoCollectionPtr infos = oClient->GetMailInfoList(); for(long i = 0; i < infos->Count; i++) { IMailInfoPtr pInfo = infos->GetItem(i); _tprintf(_T("UIDL: %s\r\n"), (TCHAR*)pInfo->UIDL); _tprintf(_T("Index: %d\r\n"), pInfo->Index); _tprintf(_T("Size: %d\r\n"), pInfo->Size); //For POP3/Exchange Web Service/WebDAV, the IMAP4MailFlags is meaningless _tprintf(_T("Flags: %s\r\n"), (TCHAR*)pInfo->IMAP4Flags); //For POP3, the Read is meaningless _tprintf(_T("Read: %s\r\n"), (pInfo->Read == VARIANT_TRUE)?_T("TRUE"):_T("FALSE")); _tprintf(_T("Deleted: %s\r\n"), (pInfo->Deleted == VARIANT_TRUE)?_T("TRUE"):_T("FALSE")); // mark unread email as read, next time this email won't be retrieved again if(pInfo->Read == VARIANT_FALSE) { oClient->MarkAsRead(pInfo, VARIANT_TRUE); } } oClient->Logout(); } catch(_com_error &ep) { _tprintf(_T("ERROR: %s\r\n"), (TCHAR*)ep.Description()); } ::CoUninitialize(); }
[Delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, EAGetMailObjLib_TLB; type TForm1 = class(TForm) Button1: TButton; private { Private declarations } procedure ReceiveMail(server: WideString; user: WideString; password: WideString; useSslConnection: Boolean); public { Public declarations } end; const MailServerPop3 = 0; MailServerImap4 = 1; MailServerEWS = 2; MailServerDAV = 3; // GetMailInfosParam Flags GetMailInfos_All = 1; GetMailInfos_NewOnly = 2; GetMailInfos_ReadOnly = 4; GetMailInfos_SeqRange = 8; GetMailInfos_UIDRange = 16; GetMailInfos_PR_ENTRYID = 32; GetMailInfos_DateRange = 64; GetMailInfos_OrderByDateTime = 128; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ReceiveMail(server: WideString; user: WideString; password: WideString; useSslConnection: Boolean); var oServer: TMailServer; oClient: TMailClient; oTools: TTools; oMail: IMail; infos: IMailInfoCollection; oInfo: IMailInfo; localInbox, fileName: WideString; i: Integer; begin try // set current thread code page to system default code page. SetThreadLocale(GetSystemDefaultLCID()); oTools := TTools.Create(Application); // Create a folder named "inbox" under // current directory to store the email files localInbox := GetCurrentDir() + '\inbox'; oTools.CreateFolder(localInbox); oServer := TMailServer.Create(Application); oServer.Server := server; oServer.User := user; oServer.Password := password; oServer.Protocol := MailServerImap4; // Enable SSL/TLS Connection, most modern email server require SSL/TLS connection by default. oServer.SSLConnection := true; // Set 993 SSL IMAP4 port oServer.Port := 993; // If your IMAP doesn't deploy SSL connection // Please use // oServer.SSLConnection := false; // oServer.Port := 143; oClient := TMailClient.Create(Application); oClient.LicenseCode := 'TryIt'; oClient.Connect1(oServer.DefaultInterface); ShowMessage('Connected!'); // retrieve unread/new email only oClient.GetMailInfosParam.Reset(); oClient.GetMailInfosParam.GetMailInfosOptions := GetMailInfos_NewOnly; infos := oClient.GetMailInfoList(); ShowMessage(Format('Total %d unread email(s)', [infos.Count])); for i := 0 to infos.Count - 1 do begin oInfo := infos.Item[i]; ShowMessage(Format('Index: %d; Size: %d; UIDL: ' + oInfo.UIDL, [oInfo.Index, oInfo.Size])); // Generate a random file name by current local datetime, // You can use your method to generate the filename if you do not like it fileName := localInbox + '\' + oTools.GenFileName(i) + '.eml'; // Receive email from IMAP server oMail := oClient.GetMail(oInfo); ShowMessage('From: ' + oMail.From.Address + #13#10 + 'Subject: ' + oMail.Subject); // Save email to local disk oMail.SaveAs(fileName, true); // mark unread email as read, next time this email won't be retrieved again if not oInfo.Read then oClient.MarkAsRead(oInfo, true); // if you don't want to leave a copy on server, please use // oClient.Delete(oInfo); // instead of MarkAsRead end; // Quit and expunge emails marked as deleted from IMAP server oClient.Quit; except on ep:Exception do ShowMessage('Error: ' + ep.Message); end; end; end.

See Also

MailClient.GetMailInfoList Method
MailClient.GetMailInfos Method
MailClient.MarkAsRead Method

Online Tutorials

Read Email and Parse Email in VB6 - Tutorial
Read Email and Parse Email in Delphi - Tutorial
Read Email and Parse Email VC++ - Tutorial