Copies a specified email from selected folder to another folder on IMAP4/MS Exchange server.
[Visual Basic 6.0]
Public Sub Copy( _
    info As MailInfo, _
    destFolder As Imap4Folder _
)
    
[Visual C++]
public: HRESULT Copy(
    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 CopyMail(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 copy email with Exchange Web Service, please change
    'MailServerImap4 to MailServerEWS to MailServer.Protocol
    'To copy 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)
        'copy to  "Deleted Items" folder
        oClient.Copy info, destFolder
    Next
    
    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 CopyMail(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 copy email with Exchange Web Service, please change
    'MailServerImap4 to MailServerEWS to MailServer.Protocol
    'To copy 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)
        'copy to  "Deleted Items" folder
        oClient.Copy info, destFolder
    Next
    
    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 CopyMail(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 copy email with Exchange Web Service, please change
        //MailServerImap4 to MailServerEWS to MailServer.Protocol
        //To copy 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->Copy(pInfo, destFolder);
        }
        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 CopyMail(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.Copy(oInfo, destFolder);
            end;
        
        oClient.Logout();
    except
        on ep:Exception do
            ShowMessage('Error: ' + ep.Message);
    end;     
end;
    See Also