Sample code for 30+ languages & platforms
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

Visual FoxPro
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