Moves a specified email from selected folder to another folder on IMAP4/MS Exchange server.
[Visual Basic 6.0]
Public Sub Move( _
info As MailInfo, _
destFolder As Imap4Folder _
)
[Visual C++]
public: HRESULT Move(
IMailInfo* info,
IImap4Folder* destFolder
);
Parameters
Example
[Visual Basic 6.0, VBScript, Visual C++, Delphi] The following example demonstrates how to copy every email in "INBOX" to "Deleted Items" with EAGetMail POP3 & IMAP Component. To get the full samples of EAGetMail, please refer to Samples section.
[Visual Basic 6.0]
Function FindFolder(ByVal FolderPath As String, ByRef folders As FolderCollection)
Dim i As Long
For i = 0 To folders.Count - 1
Dim oFolder As Imap4Folder
Set oFolder = folders.Item(i)
If StrComp(oFolder.LocalPath, FolderPath, 1) = 0 Then
Set FindFolder = oFolder
Exit Function
End If
Set oFolder = FindFolder(FolderPath, oFolder.SubFolderList)
If Not (oFolder Is Nothing) Then
Set FindFolder = oFolder
Exit Function
End If
Next
Set FindFolder = Nothing
End Function
Public Sub MoveMail(ByVal Server As String, _
ByVal User As String, _
ByVal Password As String, _
ByVal SSLConnection As Boolean)
Const MailServerPop3 = 0
Const MailServerImap4 = 1
Const MailServerEWS = 2
Const MailServerDAV = 3
Const MailServerMsGraph = 4
On Error GoTo ErrorHandle
Dim oServer As New EAGetMailObjLib.MailServer
oServer.Server = Server
oServer.User = User
oServer.Password = Password
oServer.SSLConnection = SSLConnection
oServer.Protocol = MailServerImap4
'To move email with Exchange Web Service, please change
'MailServerImap4 to MailServerEWS to MailServer.Protocol
'To move 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
If oServer.SSLConnection = True Then
oServer.Port = 993
Else
oServer.Port = 143
End If
Dim oClient As New EAGetMailObjLib.MailClient
oClient.LicenseCode = "TryIt"
oClient.Connect oServer
Dim folders as EAGetMailObjLib.FolderCollection
Set folders = oClient.GetFolderList()
Dim oFolder As EAGetMailObjLib.Imap4Folder
Set oFolder = FindFolder("Inbox", folders)
If oFolder Is Nothing Then
MsgBox "Source folder not found!"
Exit Sub
End If
oClient.SelectFolder oFolder
Dim destFolder As EAGetMailObjLib.Imap4Folder
Set destFolder = FindFolder("Deleted Items", folders)
If destFolder Is Nothing Then
MsgBox "Dest folder not found!"
Exit Sub
End If
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)
'move to "Deleted Items" folder
oClient.Move info, destFolder
Next
' Move method only marks source email as deleted, expunge method expunges source emails from server.
If oServer.Protocol = MailServerImap4 Then
oClient.Expunge
End If
oClient.Logout
Exit Sub
ErrorHandle:
MsgBox Err.Description
End Sub
[VBScript]
Function FindFolder(ByVal FolderPath, ByRef folders)
Dim i
For i = 0 To folders.Count - 1
Dim oFolder
Set oFolder = folders.Item(i)
If StrComp(oFolder.LocalPath, FolderPath, 1) = 0 Then
Set FindFolder = oFolder
Exit Function
End If
Set oFolder = FindFolder(FolderPath, oFolder.SubFolderList)
If Not (oFolder Is Nothing) Then
Set FindFolder = oFolder
Exit Function
End If
Next
Set FindFolder = Nothing
End Function
Sub MoveMail(ByVal Server, _
ByVal User, _
ByVal Password, _
ByVal SSLConnection)
Const MailServerPop3 = 0
Const MailServerImap4 = 1
Const MailServerEWS = 2
Const MailServerDAV = 3
Const MailServerMsGraph = 4
Dim oServer
Set oServer = CreateObject("EAGetMailObj.MailServer")
oServer.Server = Server
oServer.User = User
oServer.Password = Password
oServer.SSLConnection = SSLConnection
oServer.Protocol = MailServerImap4
'To move email with Exchange Web Service, please change
'MailServerImap4 to MailServerEWS to MailServer.Protocol
'To move 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
If oServer.SSLConnection = True Then
oServer.Port = 993
Else
oServer.Port = 143
End If
Dim oClient
Set oClient = CreateObject("EAGetMailObj.MailClient")
oClient.LicenseCode = "TryIt"
oClient.Connect oServer
Dim folders
Set folders = oClient.GetFolderList()
Dim oFolder
Set oFolder = FindFolder("Inbox", folders)
If oFolder Is Nothing Then
MsgBox "Source folder not found!"
Exit Sub
End If
oClient.SelectFolder oFolder
Dim destFolder
Set destFolder = FindFolder("Deleted Items", folders)
If destFolder Is Nothing Then
MsgBox "Dest folder not found!"
Exit Sub
End If
Dim infos
Set infos = oClient.GetMailInfoList()
Dim i
For i = 0 To infos.Count - 1
Dim info
Set info = infos.Item(i)
'move to "Deleted Items" folder
oClient.Move info, destFolder
Next
' Move method only marks source email as deleted, expunge method expunges source emails from server.
If oServer.Protocol = MailServerImap4 Then
oClient.Expunge
End If
oClient.Logout
End Sub
[Visual C++]
#include "stdafx.h"
#include <windows.h>
#include "eagetmailobj.tlh"
using namespace EAGetMailObjLib;
IImap4FolderPtr FindFolder(LPCTSTR folderPath, IFolderCollectionPtr& folders)
{
for(long i = 0; i < folders->Count; i++)
{
IImap4FolderPtr oFolder = folders->GetItem(i);
if(_tcsicmp((TCHAR*)oFolder->LocalPath, folderPath) == 0)
{
return oFolder;
}
IFolderCollectionPtr subFolders = oFolder->SubFolderList;
oFolder = FindFolder(folderPath, subFolders);
if(oFolder != NULL)
{
return oFolder;
}
}
return NULL;
}
void MoveMail(LPCTSTR lpszServer,
LPCTSTR lpszUser,
LPCTSTR lpszPassword,
VARIANT_BOOL SSLConnection)
{
::CoInitialize(NULL);
const int MailServerPop3 = 0;
const int MailServerImap4 = 1;
const int MailServerEWS = 2;
const int MailServerDAV = 3;
const int MailServerMsGraph = 4;
try
{
IMailServerPtr oServer = NULL;
oServer.CreateInstance(__uuidof(EAGetMailObjLib::MailServer));
oServer->Server = lpszServer;
oServer->User = lpszUser;
oServer->Password = lpszPassword;
oServer->SSLConnection = SSLConnection;
oServer->Protocol = MailServerImap4;
//To move email with Exchange Web Service, please change
//MailServerImap4 to MailServerEWS to MailServer.Protocol
//To move 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
if(SSLConnection == VARIANT_TRUE)
oServer->Port = 993;
else
oServer->Port = 143;
IMailClientPtr oClient = NULL;
oClient.CreateInstance(__uuidof(EAGetMailObjLib::MailClient));
oClient->LicenseCode = _T("TryIt");
oClient->Connect(oServer);
IFolderCollectionPtr folders = oClient->GetFolderList();
IImap4FolderPtr oFolder = FindFolder(_T("Inbox"), folders);
if(oFolder == NULL)
{
//"Source folder " not found
throw _com_error(E_FAIL);
}
//select "source" folder
oClient->SelectFolder(oFolder);
IImap4FolderPtr destFolder = FindFolder(_T("Deleted Items"), folders);
if(destFolder == NULL)
{
//"Dest folder " not found
throw _com_error(E_FAIL);
}
IMailInfoCollectionPtr infos = oClient->GetMailInfoList();
for(long i = 0; i < infos->Count; i++)
{
IMailInfoPtr pInfo = infos->GetItem(i);
oClient->Move(pInfo, destFolder);
}
// Move method only marks source email as deleted, expunge method expunges source emails from server.
if(oServer->Protocol == MailServerImap4)
oClient->Expunge();
oClient->Logout();
}
catch(_com_error &ep )
{
_tprintf(_T("%s\r\n"), (TCHAR*)ep.Description());
}
::CoUninitialize();
}
[Delphi]
const
MailServerPop3 = 0;
MailServerImap4 = 1;
MailServerEWS = 2;
MailServerDAV = 3;
function FindFolder(folderPath: WideString; folders: IFolderCollection) :IImap4Folder;
var
i: integer;
folder: IImap4Folder;
begin
for i:= 0 to folders.Count - 1 do
begin
folder := folders.Item[i];
if CompareText(folder.LocalPath, folderPath) = 0 then
begin
result := folder;
exit;
end;
// Search folder in sub-folders
folder := FindFolder(folderPath, folder.SubFolderList);
if not (folder = nil ) then
begin
result := folder;
exit;
end;
end;
// No folder found
result := nil;
end;
procedure MoveMail(server: WideString; user: WideString; password: WideString; useSslConnection: Boolean);
var
oServer: TMailServer;
oClient: TMailClient;
folders: IFolderCollection;
oFolder, destFolder: IImap4Folder;
infos: IMailInfoCollection;
oInfo: IMailInfo;
i: Integer;
begin
try
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 := useSslConnection;
if useSslConnection then
begin
// Set 993 SSL IMAP port
oServer.Port := 993;
end
else
begin
// Set 143 IMAP port
oServer.Port := 143;
end;
oClient := TMailClient.Create(Application);
oClient.LicenseCode := 'TryIt';
oClient.Connect1(oServer.DefaultInterface);
ShowMessage('Connected!');
// get folder list
folders := oClient.GetFolderList();
// find source folder.
oFolder := FindFolder('Inbox', folders);
if oFolder = nil then
raise Exception.Create('No source folder found!');
// select "source" folder, GetMailInfoList returns the mail list in selected folder.
oClient.SelectFolder(oFolder);
// find dest folder.
destFolder := FindFolder('Deleted Items', folders);
if destFolder = nil then
raise Exception.Create('No dest folder found!');
infos := oClient.GetMailInfoList();
for i := 0 to infos.Count - 1 do
begin
oInfo := infos.Item[i];
oClient.Move(oInfo, destFolder);
end;
// Move method only marks source email as deleted, expunge method expunges source emails from server.
if oServer.Protocol = MailServerImap4 then
oClient.Expunge();
oClient.Logout();
except
on ep:Exception do
ShowMessage('Error: ' + ep.Message);
end;
end;
See Also