Search emails in IMAP4 mail server.
This method is obsoleted by SearchMailList
[Visual Basic 6.0] Public Function SearchMail( condition As String _ ) As Variant
[Visual C++] public: HRESULT SearchMail( BSTR condition, VARIANT* pVal );
Parameters
Return Value
Remarks
The SearchMail method searches the mailbox for messages that match the given searching criteria. Searching criteria consist of one or more search keys.
The defined search keys are as follows. Refer to the Formal
Syntax section for the precise syntactic definitions of the
arguments.
<message set> Messages with message sequence numbers
corresponding to the specified message sequence
number set
ALL All messages in the mailbox; the default initial
key for ANDing.
ANSWERED Messages with the \Answered flag set.
BCC <string> Messages that contain the specified string in the
envelope structure's BCC field.
BEFORE <date> Messages whose internal date is earlier than the
specified date.
BODY <string> Messages that contain the specified string in the
body of the message.
CC <string> Messages that contain the specified string in the
envelope structure's CC field.
DELETED Messages with the \Deleted flag set.
DRAFT Messages with the \Draft flag set.
FLAGGED Messages with the \Flagged flag set.
FROM <string> Messages that contain the specified string in the
envelope structure's FROM field.
HEADER <field-name> <string>
Messages that have a header with the specified
field-name (as defined in [RFC-822]) and that
contains the specified string in the [RFC-822]
field-body.
KEYWORD <flag> Messages with the specified keyword set.
LARGER <n> Messages with an [RFC-822] size larger than the
specified number of octets.
NEW Messages that have the \Recent flag set but not the
\Seen flag. This is functionally equivalent to
"(RECENT UNSEEN)".
NOT <search-key>
Messages that do not match the specified search
key.
OLD Messages that do not have the \Recent flag set.
This is functionally equivalent to "NOT RECENT" (as
opposed to "NOT NEW").
ON <date> Messages whose internal date is within the
specified date.
OR <search-key1> <search-key2>
Messages that match either search key.
RECENT Messages that have the \Recent flag set.
SEEN Messages that have the \Seen flag set.
SENTBEFORE <date>
Messages whose [RFC-822] Date: header is earlier
than the specified date.
SENTON <date> Messages whose [RFC-822] Date: header is within the
specified date.
SENTSINCE <date>
Messages whose [RFC-822] Date: header is within or
later than the specified date.
SINCE <date> Messages whose internal date is within or later
than the specified date.
SMALLER <n> Messages with an [RFC-822] size smaller than the
specified number of octets.
SUBJECT <string>
Messages that contain the specified string in the
envelope structure's SUBJECT field.
TEXT <string> Messages that contain the specified string in the
header or body of the message.
TO <string> Messages that contain the specified string in the
envelope structure's TO field.
UID <message set>
Messages with unique identifiers corresponding to
the specified unique identifier set.
UNANSWERED Messages that do not have the \Answered flag set.
UNDELETED Messages that do not have the \Deleted flag set.
UNDRAFT Messages that do not have the \Draft flag set.
UNFLAGGED Messages that do not have the \Flagged flag set.
UNKEYWORD <flag>
Messages that do not have the specified keyword
set.
UNSEEN Messages that do not have the \Seen flag set.
You can also use MailClient.GetMailInfosParam Property to set filters such as "retrieve new emails only" instead of SearchMail method.
Example
[Visual Basic 6.0, VBScript, Visual C++] The following example demonstrates how to search email with EAGetMail POP3 & IMAP ActiveX Object, but it doesn't demonstrates the events and mail parsing usage. 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
'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 from imap4 server, please change
'MailServerPop3 to MailServerImap4 in MailServer constructor
Dim oServer As New EAGetMailObjLib.MailServer
oServer.Server = sServer
oServer.User = sUserName
oServer.Password = sPassword
oServer.SSLConnection = bSSLConnection
oServer.Protocol = MailServerImap4
If oServer.SSLConnection Then
oServer.Port = 993 'SSL IMAP4
Else
oServer.Port = 143 'IMAP4 normal
End If
On Error GoTo ErrorHandle
oClient.Connect oServer
Dim infos
infos = oClient.SearchMail("ALL ON 8-AUG-2008 FROM ""John""")
Dim i, Count
Count = UBound(infos)
For i = LBound(infos) To Count
Dim info As EAGetMailObjLib.MailInfo
Set info = infos(i)
MsgBox "UIDL: " & info.UIDL
MsgBox "Index: " & info.Index
MsgBox "Size: " & info.Size
'For POP3 server, the IMAP4MailFlags is meaningless.
MsgBox "Flags: " & info.IMAP4Flags
Dim oMail As EAGetMailObjLib.Mail
Set oMail = oClient.GetMail(info)
'Save mail to local
oMail.SaveAs "d:\tempfolder\" & i & ".eml", True
Next
For i = LBound(infos) To Count
oClient.Delete (infos(i))
Next
'' Delete method just mark the email as deleted,
' Quit method expunge the emails from server permanently.
oClient.Quit
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
'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 from imap4 server, please change
'MailServerPop3 to MailServerImap4 in MailServer constructor
Dim oServer
Set oServer = CreateObject("EAGetMailObj.MailServer")
oServer.Server = sServer
oServer.User = sUserName
oServer.Password = sPassword
oServer.SSLConnection = bSSLConnection
oServer.Protocol = MailServerImap4
If oServer.SSLConnection Then
oServer.Port = 993 'SSL IMAP4
Else
oServer.Port = 143 'IMAP4 normal
End If
oClient.Connect oServer
Dim infos
infos = oClient.SearchMail("ALL NEW FROM ""John""")
Dim i, Count
Count = UBound(infos)
For i = LBound(infos) To Count
Dim info
Set info = infos(i)
MsgBox "UIDL: " & info.UIDL
MsgBox "Index: " & info.Index
MsgBox "Size: " & info.Size
'For POP3 server, the IMAP4MailFlags is meaningless.
MsgBox "Flags: " & info.IMAP4Flags
Dim oMail
Set oMail = oClient.GetMail(info)
'Save mail to local
oMail.SaveAs "d:\tempfolder\" & i & ".eml", True
Next
For i = LBound(infos) To Count
oClient.Delete (infos(i))
Next
'' Delete method just mark the email as deleted,
' Quit method expunge the emails from server permanently.
oClient.Quit
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;
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;
if(bSSLConnection)
{
oServer->Port = 993;
oServer->SSLConnection = VARIANT_TRUE;
}
else
{
oServer->Port = 143;
}
oClient->Connect(oServer);
_variant_t arInfo = oClient->SearchMail(_T("ALL NEW SUBJECT \"test\""));
SAFEARRAY *psa = arInfo.parray;
long LBound = 0, UBound = 0;
SafeArrayGetLBound(psa, 1, &LBound);
SafeArrayGetUBound(psa, 1, &UBound);
INT count = UBound-LBound+1;
for(long i = LBound; i <= UBound; i++)
{
_variant_t vtInfo;
SafeArrayGetElement(psa, &i, &vtInfo);
IMailInfoPtr pInfo;
vtInfo.pdispVal->QueryInterface(__uuidof(IMailInfo), (void**)&pInfo);
_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 server, the IMAP4MailFlags is meaningless
_tprintf(_T("Flags: %s\r\n"), (TCHAR*)pInfo->IMAP4Flags);
IMailPtr oMail = oClient->GetMail(pInfo);
TCHAR szFile[MAX_PATH+1];
memset(szFile, 0, sizeof(szFile));
::wsprintf(szFile, _T("d:\\tempfolder\\%d.eml"), i);
//save to local disk
oMail->SaveAs(szFile, VARIANT_TRUE);
oMail.Release();
}
for(long i = LBound; i <= UBound; i++)
{
_variant_t vtInfo;
SafeArrayGetElement(psa, &i, &vtInfo);
IMailInfoPtr pInfo;
vtInfo.pdispVal->QueryInterface(__uuidof(IMailInfo), (void**)&pInfo);
//delete email from server
oClient->Delete(pInfo);
}
// Delete method just mark the email as deleted,
// Quit method expunge the emails from server permanently.
arInfo.Clear();
oClient->Quit();
}
catch(_com_error &ep)
{
_tprintf(_T("ERROR: %s\r\n"), (TCHAR*)ep.Description());
}
::CoUninitialize();
}
See Also