Lianja
Lianja
Process New Email by Scanning for Senders
Scan email and save application-selected emails to EML files with unique filenames.Chilkat Lianja Downloads
llSuccess = .F.
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
loImap = createobject("CkImap")
// Connect to an IMAP server.
// Use TLS
loImap.Ssl = .T.
loImap.Port = 993
llSuccess = loImap.Connect("imap.example.com")
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
return
endif
// Login
llSuccess = loImap.Login("myLogin","myPassword")
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
return
endif
// Select an IMAP mailbox
llSuccess = loImap.SelectMailbox("Inbox")
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
return
endif
// We can choose to fetch UIDs or sequence numbers.
llFetchUids = .T.
// Fetch messages from the mailbox using a search criteria.
// This example finds NEW emails: these are emails that have the RECENT flag set, but not the SEEN flag:
loMessageSet = createobject("CkMessageSet")
llSuccess = loImap.QueryMbx("NEW",llFetchUids,loMessageSet)
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
release loMessageSet
return
endif
// This example will download headers, and then download
// the full email for those emails sent from a contact
// in our database.
// When downloading headers, each email object contains
// (obviously) the headers, but the body will be missing.
// Also, attachments will not be included. However, it is
// possible to get information about the attachments
// as well as the complete size of the email.
loBundle = createobject("CkEmailBundle")
llHeadersOnly = .T.
llSuccess = loImap.FetchMsgSet(llHeadersOnly,loMessageSet,loBundle)
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
release loMessageSet
release loBundle
return
endif
// Loop over the email objects...
loEmailHeader = createobject("CkEmail")
loFullEmail = createobject("CkEmail")
i = 0
lnNumEmails = loBundle.MessageCount
do while i < lnNumEmails
loBundle.EmailAt(i,loEmailHeader)
// The sender's email address and name are available
// in the From, FromAddress, and FromName properties.
// If the sender is "Chilkat Support <support@chilkatsoft.com",
// then the From property will hold the entire string.
// the FromName property contains"Chilkat Support",
// and the FromAddress property contains "support@chilkatsoft.com"
? loEmailHeader.From
? loEmailHeader.FromAddress
? loEmailHeader.FromName
// Assume at this point your code checks to see if the sender
// is one in your contacts database. If so, this is
// the code you would write to download the entire
// email and save it to a file.
// The ckx-imap-uid header field is added when
// headers are downloaded. This makes it possible
// to get the UID from the email object.
lcUidStr = loEmailHeader.GetHeaderField("ckx-imap-uid")
lnUid = val(lcUidStr)
llSuccess = loImap.FetchEmail(.F.,lnUid,.T.,loFullEmail)
if (llSuccess = .F.) then
? loImap.LastErrorText
release loImap
release loMessageSet
release loBundle
release loEmailHeader
release loFullEmail
return
endif
// You can use the GenerateFilename method to
// generate a unique filename...
lcFilename = loFullEmail.GenerateFilename()
// SaveEml saves the entire email, including attachments.
llSuccess = loFullEmail.SaveEml(lcFilename)
? "--"
i = i + 1
enddo
// Disconnect from the IMAP server.
llSuccess = loImap.Disconnect()
release loImap
release loMessageSet
release loBundle
release loEmailHeader
release loFullEmail