MailClient.WaitNewEmail Method


Get notification of new email on IMAP4 server and MS Exchange server(WebDAV, EWS).

[Visual Basic]
Public Function WaitNewEmail( _
    Timeout As Integer
) As Boolean
[C#]
public bool WaitNewEmail(
    int Timeout
);
[C++]
public: bool WaitNewEmail(
    int Timeout
);
[JScript]
public function WaitNewEmail( 
    Timeout: int
) : Boolean;

Parameters

Timeout
The number of milliseconds to wait, or -1 to wait indefinitely. If Timeout is zero, the method does not block. It tests the state of the new email and returns immediately.

Return Value

True means there is new email arrived; false means time out waiting for new email.

Remarks

This method only supports IMAP4/EWS/WebDAV protocols, it doesn't support POP3 protocol.

Example

[Visual Basic, C#, C++] The following example demonstrates how to get new email notification with EAGetMail POP3 and IMAP Component, but it doesn't demonstrates the events and mail parsing usage. To get the full samples of EAGetMail, please refer to Samples section.

[VB - Get new email notification from IMAP4 Server and MS Exchange Server]
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

    Shared Sub RefreshMail(ByRef oClient As MailClient)

        ' 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

        oClient.RefreshMailInfos()

        Console.WriteLine("Retrieving email list ...")
        Dim infos() As MailInfo = oClient.GetMailInfos()
        Console.WriteLine("Total {0} 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)

            ' 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 email as deleted on server.
            Console.WriteLine("Deleting ... {0}/{1}", i + 1, infos.Length)
            oClient.Delete(info)
        Next

        ' Expunge deleted email from server.
        oClient.Expunge()
    End Sub

    Public Sub MonitorNewEmail(server As String, user As String, password As String, useSsl As Boolean)
        Try
            ' ExchangeEWS Or ExchangeWebDAV protocol also supports WaitNewEmail method.

            ' 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.
            oServer.Port = If(useSsl, 993, 143)

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

            RefreshMail(oClient)

            ' Wait for new email notification for 60 seconds
            If oClient.WaitNewEmail(60000) Then
                ' New email arrived, Retrieve emails again
                RefreshMail(oClient)
            Else
                ' No new email, cancel waiting
                oClient.CancelWaitEmail()
            End If

            Console.WriteLine("Disconnecting ...")

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

    End Sub

End Class


[C# - Get new email notification from IMAP4 Server and MS Exchange Server] 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); } static void RefreshMail(ref MailClient oClient) { // 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); } oClient.RefreshMailInfos(); Console.WriteLine("Retrieving email list ..."); MailInfo[] infos = oClient.GetMailInfos(); Console.WriteLine("Total {0} 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]; // 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 mail to local file oMail.SaveAs(fullPath, true); // Mark the email as deleted on server. Console.WriteLine("Deleting ... {0}/{1}", i + 1, infos.Length); oClient.Delete(info); } // Expunge deleted email from server. oClient.Expunge(); } public void MonitorNewEmail(string server, string user, string password, bool useSsl) { try { // ExchangeEWS Or ExchangeWebDAV protocol also supports WaitNewEmail method. // 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. oServer.Port = (useSsl) ? 993 : 143; Console.WriteLine("Connecting server ..."); MailClient oClient = new MailClient("TryIt"); oClient.Connect(oServer); RefreshMail(ref oClient); // Wait for new email notification for 60 seconds if (oClient.WaitNewEmail(60000)) { // New email arrived, Retrieve emails again RefreshMail(ref oClient); } else { // No new email, cancel waiting oClient.CancelWaitEmail(); } Console.WriteLine("Disconnecting ..."); oClient.Logout(); Console.WriteLine("Completed!"); } catch (Exception ep) { Console.WriteLine("Error: {0}", ep.Message); } } }
[C++/CLI - Get new email notification from IMAP4 Server and MS Exchange Server] 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); } static void RefreshMail(MailClient ^oClient) { // 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); } oClient->RefreshMailInfos(); Console::WriteLine("Retreiving email list ..."); array<MailInfo^> ^infos = oClient->GetMailInfos(); Console::WriteLine("Total {0} 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]; // 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 email as deleted on server. Console::WriteLine("Deleting ... {0}/{1}", i + 1, infos->Length); oClient->Delete(info); } // Expunge deleted email from server. oClient->Expunge(); } void MonitorNewEmail(String ^server, String ^user, String ^password, bool useSsl) { try { // ExchangeEWS Or ExchangeWebDAV protocol also supports WaitNewEmail method. // 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. oServer->Port = (useSsl) ? 993 : 143; Console::WriteLine("Connecting server ..."); MailClient ^oClient = gcnew MailClient("TryIt"); oClient->Connect(oServer); RefreshMail(oClient); // Wait for new email notification for 60 seconds if (oClient->WaitNewEmail(60000)) { // New email arrived, Retrieve emails again RefreshMail(oClient); } else { // No new email, cancel waiting oClient->CancelWaitEmail(); } Console::WriteLine("Disconnecting ..."); oClient->Logout(); Console::WriteLine("Completed!"); } catch (Exception ^ep) { Console::WriteLine("Error: {0}", ep->Message); } }

See Also

MailClient.CancelWaitEmail Method
User Authentication and SSL/TLS Connection
Mail Class

Online Tutorials

Read Email and Parse Email in C# - Tutorial
Read Email and Parse Email in VB.NET - Tutorial
Read Email and Parse Email C++/CLI - Tutorial

Read Email over SSL/TLS Connection in C# - Tutorial
Read Email from Gmail Account in C# - Tutorial
Read Email from Yahoo Account in C# - Tutorial
Read Email from Hotmail Account in C# - Tutorial

Read Email over SSL/TLS Connection in VB.NET - Tutorial
Read Email from Gmail Account in VB.NET - Tutorial
Read Email from Yahoo Account in VB.NET - Tutorial
Read Email from Hotmail Account in VB.NET - Tutorial

Read Email over SSL/TLS Connection C++/CLI - Tutorial
Read Email from Gmail Account in C++/CLI - Tutorial
Read Email from Yahoo Account in C++/CLI - Tutorial
Read Email from Hotmail Account in C++/CLI - Tutorial