DataFlex
DataFlex
Move Selected Emails to another Mailbox Folder
See more IMAP Examples
Downloads emails one by one in a selected mailbox, decides which emails are to be moved, and then moves the set of messages to another mailbox folder.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoImap
Integer iNumEmails
Variant vMset
Handle hoMset
Variant vEmail
Handle hoEmail
Integer i
String sDestFolder
String sTemp1
Integer iTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatImap)) To hoImap
If (Not(IsComObjectCreated(hoImap))) Begin
Send CreateComObject of hoImap
End
// Connect to an IMAP server.
// Use TLS
Set ComSsl Of hoImap To True
Set ComPort Of hoImap To 993
Get ComConnect Of hoImap "imap.example.com" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Login
Get ComLogin Of hoImap "myLogin" "myPassword" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Select an IMAP mailbox
Get ComSelectMailbox Of hoImap "Inbox" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Normally, when an email is downloaded, its "Seen" flag is automatically set.
// We don't want our program to be interfering with the "Seen" flags.
// To do this, set the PeekMode to True.
Set ComPeekMode Of hoImap To True
// After selecting the mailbox, the NumMessages property
// will contain the number of emails in the mailbox.
// When sequence numbers (not UIDs) are used to reference emails,
// they range from 1 to N, where N is the number of messages in the mailbox.
// This example will download the headers by sequence numbers.
Get ComNumMessages Of hoImap To iNumEmails
Get Create (RefClass(cComChilkatMessageSet)) To hoMset
If (Not(IsComObjectCreated(hoMset))) Begin
Send CreateComObject of hoMset
End
// Indicate that mset contains sequence numbers, not UIDs.
Set ComHasUids Of hoMset To False
// Fetch each email and decide for each if it is to be moved
// to a particular other mailbox. If so, we'll add the sequence number to
// the mset, and then move all emails in the mset to the other mailbox.
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
Move 0 To i
While (i < iNumEmails)
// Fetch the email by sequence number.
Get pvComObject of hoEmail to vEmail
Get ComFetchEmail Of hoImap False (i + 1) False vEmail To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// If it is decided to move the email, add the sequence number to mset, like this:
Send ComInsertId To hoMset (i + 1)
Loop
// If there are emails in mset to be moved, then do it..
Get ComCount Of hoMset To iTemp1
If (iTemp1 > 0) Begin
Move "Inbox/SomeOtherFolder" To sDestFolder
// Assuming your IMAP server supports the feature that allows for messages to be moved to another folder...
Get pvComObject of hoMset to vMset
Get ComMoveMessages Of hoImap vMset sDestFolder To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
End
// Disconnect from the IMAP server.
Get ComDisconnect Of hoImap To iSuccess
End_Procedure