Tcl
Tcl
Download an IMAP Message Set
Demonstrates how to read a set of IMAP emails.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set imap [new_CkImap]
# Connect using TLS.
CkImap_put_Ssl $imap 1
CkImap_put_Port $imap 993
set success [CkImap_Connect $imap "imap.example.com"]
if {$success == 0} then {
puts [CkImap_lastErrorText $imap]
delete_CkImap $imap
exit
}
# Authenticate
set success [CkImap_Login $imap "email_account_login" "email_account_password"]
if {$success == 0} then {
puts [CkImap_lastErrorText $imap]
delete_CkImap $imap
exit
}
# Select an IMAP mailbox
set success [CkImap_SelectMailbox $imap "Inbox"]
if {$success == 0} then {
puts [CkImap_lastErrorText $imap]
delete_CkImap $imap
exit
}
# Search for messages with the word "test" in the subject.
set fetchUids 1
set messageSet [new_CkMessageSet]
set success [CkImap_QueryMbx $imap "Subject test" $fetchUids $messageSet]
if {$success == 0} then {
puts [CkImap_lastErrorText $imap]
delete_CkImap $imap
delete_CkMessageSet $messageSet
exit
}
# Download the messages in a single call to FetchMsgSet.
#
# This only makes sense if the number of emails to be downloaded is not too large.
# For example, you wouldn't want to download 10000 emails in a single call to FetchMsgSet.
# Why? For two reasons: (1) It could potentially cause an out-of-memory condition, and
# (2) it would take an extremely large amount of time. The longer the amount of time,
# the greater the likelihood of some kind of external networking or server problem occuring,
# and if it happens, then you would need to re-download everything from the beginning again.
# For large numbers of emails, it's better to loop over the emails in the message set
# and download/process one at a time as shown here: Download IMAP Messages One at a Time
# Downloading one message at a time makes it possible to resume the downloads rather than restart the entire operation all over again.
# If the message set is reasonable in size, you can download all at once using FetchMsgSet:
puts "Number of messages = [CkMessageSet_get_Count $messageSet]"
set bundle [new_CkEmailBundle]
set headersOnly 0
set success [CkImap_FetchMsgSet $imap $headersOnly $messageSet $bundle]
if {$success == 0} then {
puts [CkImap_lastErrorText $imap]
delete_CkImap $imap
delete_CkMessageSet $messageSet
delete_CkEmailBundle $bundle
exit
}
# Display the Subject and From of each email.
set email [new_CkEmail]
set i 0
set numEmails [CkEmailBundle_get_MessageCount $bundle]
while {$i < $numEmails} {
CkEmailBundle_EmailAt $bundle $i $email
puts [CkEmail_getHeaderField $email Date]
puts [CkEmail_subject $email]
puts [CkEmail_from $email]
puts "--"
set i [expr $i + 1]
}
delete_CkImap $imap
delete_CkMessageSet $messageSet
delete_CkEmailBundle $bundle
delete_CkEmail $email