Visual FoxPro
Visual FoxPro
Process New Email by Scanning for Senders
Scan email and save application-selected emails to EML files with unique filenames.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loImap
LOCAL lnFetchUids
LOCAL loMessageSet
LOCAL loBundle
LOCAL lnHeadersOnly
LOCAL loEmailHeader
LOCAL loFullEmail
LOCAL i
LOCAL lnNumEmails
LOCAL lcUidStr
LOCAL lnUid
LOCAL lcFilename
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loImap = CreateObject('Chilkat.Imap')
* Connect to an IMAP server.
* Use TLS
loImap.Ssl = 1
loImap.Port = 993
lnSuccess = loImap.Connect("imap.example.com")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
CANCEL
ENDIF
* Login
lnSuccess = loImap.Login("myLogin","myPassword")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
CANCEL
ENDIF
* Select an IMAP mailbox
lnSuccess = loImap.SelectMailbox("Inbox")
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
CANCEL
ENDIF
* We can choose to fetch UIDs or sequence numbers.
lnFetchUids = 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:
loMessageSet = CreateObject('Chilkat.MessageSet')
lnSuccess = loImap.QueryMbx("NEW",lnFetchUids,loMessageSet)
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loMessageSet
CANCEL
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('Chilkat.EmailBundle')
lnHeadersOnly = 1
lnSuccess = loImap.FetchMsgSet(lnHeadersOnly,loMessageSet,loBundle)
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loMessageSet
RELEASE loBundle
CANCEL
ENDIF
* Loop over the email objects...
loEmailHeader = CreateObject('Chilkat.Email')
loFullEmail = CreateObject('Chilkat.Email')
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)
lnSuccess = loImap.FetchEmail(0,lnUid,1,loFullEmail)
IF (lnSuccess = 0) THEN
? loImap.LastErrorText
RELEASE loImap
RELEASE loMessageSet
RELEASE loBundle
RELEASE loEmailHeader
RELEASE loFullEmail
CANCEL
ENDIF
* You can use the GenerateFilename method to
* generate a unique filename...
lcFilename = loFullEmail.GenerateFilename()
* SaveEml saves the entire email, including attachments.
lnSuccess = loFullEmail.SaveEml(lcFilename)
? "--"
i = i + 1
ENDDO
* Disconnect from the IMAP server.
lnSuccess = loImap.Disconnect()
RELEASE loImap
RELEASE loMessageSet
RELEASE loBundle
RELEASE loEmailHeader
RELEASE loFullEmail