Xbase++ Requires Chilkat v11.0.0+
Xbase++
Process New Email by Scanning for Senders
Scan email and save application-selected emails to EML files with unique filenames.Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oImap
LOCAL nFetchUids
LOCAL oMessageSet
LOCAL oBundle
LOCAL nHeadersOnly
LOCAL oEmailHeader
LOCAL oFullEmail
LOCAL i
LOCAL nNumEmails
LOCAL cUidStr
LOCAL nUid
LOCAL cFilename
nSuccess := 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
oImap := CreateObject("Chilkat.Imap")
// Connect to an IMAP server.
// Use TLS
oImap:Ssl := 1
oImap:Port := 993
nSuccess := oImap:Connect("imap.example.com")
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
RETURN
ENDIF
// Login
nSuccess := oImap:Login("myLogin", "myPassword")
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
RETURN
ENDIF
// Select an IMAP mailbox
nSuccess := oImap:SelectMailbox("Inbox")
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
RETURN
ENDIF
// We can choose to fetch UIDs or sequence numbers.
nFetchUids := 1
// 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:
oMessageSet := CreateObject("Chilkat.MessageSet")
nSuccess := oImap:QueryMbx("NEW", nFetchUids, oMessageSet)
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
oMessageSet:destroy()
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.
oBundle := CreateObject("Chilkat.EmailBundle")
nHeadersOnly := 1
nSuccess := oImap:FetchMsgSet(nHeadersOnly, oMessageSet, oBundle)
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
oMessageSet:destroy()
oBundle:destroy()
RETURN
ENDIF
// Loop over the email objects...
oEmailHeader := CreateObject("Chilkat.Email")
oFullEmail := CreateObject("Chilkat.Email")
i := 0
nNumEmails := oBundle:MessageCount
DO WHILE i < nNumEmails
oBundle:EmailAt(i, oEmailHeader)
// 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";
? oEmailHeader:From
? oEmailHeader:FromAddress
? oEmailHeader: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.
cUidStr := oEmailHeader:GetHeaderField("ckx-imap-uid")
nUid := Val(cUidStr)
nSuccess := oImap:FetchEmail(0, nUid, 1, oFullEmail)
IF (nSuccess == 0)
? oImap:LastErrorText
oImap:destroy()
oMessageSet:destroy()
oBundle:destroy()
oEmailHeader:destroy()
oFullEmail:destroy()
RETURN
ENDIF
// You can use the GenerateFilename method to
// generate a unique filename...
cFilename := oFullEmail:GenerateFilename()
// SaveEml saves the entire email, including attachments.
nSuccess := oFullEmail:SaveEml(cFilename)
? "--"
i := i + 1
ENDDO
// Disconnect from the IMAP server.
nSuccess := oImap:Disconnect()
oImap:destroy()
oMessageSet:destroy()
oBundle:destroy()
oEmailHeader:destroy()
oFullEmail:destroy()