DataFlex
DataFlex
Fetch Full Email Given Email Header
When you fetch email headers using UIDs instead of sequence numbers, the email object (which includes only the header) will have auto-generatedckx-imap-* headers. These headers provide details like the UID and attachments. The IMAP UID is found in the ckx-imap-uid header. Additionally, the ckx-imap-isUid header indicates whether the email header was downloaded by UID, showing YES or NO. Since sequence numbers can change if emails are deleted, UIDs are essential for downloading the correct full email.
The Chilkat Email object offers a GetImapUid method to retrieve the UID from the ckx-imap-uid header. This UID can be used to fetch the full email.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoImap
Variant vEmailHeader
Handle hoEmailHeader
Variant vEmailFull
Handle hoEmailFull
Integer iUid
Boolean iIsUid
Integer iUidFromCkxHeader
String sTemp1
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 "***" "***" 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
Get Create (RefClass(cComChilkatEmail)) To hoEmailHeader
If (Not(IsComObjectCreated(hoEmailHeader))) Begin
Send CreateComObject of hoEmailHeader
End
Get Create (RefClass(cComChilkatEmail)) To hoEmailFull
If (Not(IsComObjectCreated(hoEmailFull))) Begin
Send CreateComObject of hoEmailFull
End
Move 2014 To iUid
Move True To iIsUid
// Fetch only the email header
Get pvComObject of hoEmailHeader to vEmailHeader
Get ComFetchEmail Of hoImap True iUid iIsUid vEmailHeader To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Now fetch the full email
Get ComGetImapUid Of hoEmailHeader To iUidFromCkxHeader
If (iUidFromCkxHeader < 0) Begin
// Failed.
Showln "No ckx-imap-uid header was found."
Procedure_Return
End
Get pvComObject of hoEmailFull to vEmailFull
Get ComFetchEmail Of hoImap False iUid iIsUid vEmailFull To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// OK, we have the full email, do whatever we want...
// Disconnect from the IMAP server.
Get ComDisconnect Of hoImap To iSuccess
End_Procedure