Sample code for 30+ languages & platforms
Xbase++

Fetch a Text IMAP Attachment as a String

See more IMAP Examples

Demonstrates the Chilkat Imap.FetchAttachmentString method, which returns one text attachment decoded to a string. The first argument is the Email, the second is the zero-based attachment index, and the third is the charset used to decode the bytes. This example returns the first attachment as a UTF-8 string.

Background: This is the convenient form when you simply want a small text attachment's content inline as a string. Only use it for attachments known to be text; decoding binary content through a charset can alter or corrupt the bytes. For binary data use FetchAttachmentBd, and for large text a StringBuilder (via FetchAttachmentSb) avoids an extra copy.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oImap
LOCAL nHeadersOnly
LOCAL nUseUid
LOCAL nSeqNum
LOCAL oEmail
LOCAL nNumAttach
LOCAL cAttachText

nSuccess := 0

//  Demonstrates the Imap.FetchAttachmentString method, which downloads one text attachment and
//  returns it decoded to a string.  The 1st argument is the Email, the 2nd is the zero-based
//  attachment index, and the 3rd is the charset used to decode the bytes.
//  
//  The message is fetched headers-only, then the attachment is downloaded on demand.

oImap := CreateObject("Chilkat.Imap")

oImap:Ssl := 1
oImap:Port := 993

nSuccess := oImap:Connect("imap.example.com")
IF (nSuccess == 0)
    ? oImap:LastErrorText
    oImap:destroy()
    RETURN
ENDIF

nSuccess := oImap:Login("user@example.com", "myPassword")
IF (nSuccess == 0)
    ? oImap:LastErrorText
    oImap:destroy()
    RETURN
ENDIF

nSuccess := oImap:SelectMailbox("Inbox")
IF (nSuccess == 0)
    ? oImap:LastErrorText
    oImap:destroy()
    RETURN
ENDIF

//  Fetch only the message headers.  Attachment bodies are NOT downloaded, but the ckx-imap-*
//  metadata describing the attachments is present, so the attachment info methods still work.
nHeadersOnly := 1
nUseUid := 0
nSeqNum := 1
oEmail := CreateObject("Chilkat.Email")
nSuccess := oImap:FetchEmail(nHeadersOnly, nSeqNum, nUseUid, oEmail)
IF (nSuccess == 0)
    ? oImap:LastErrorText
    oImap:destroy()
    oEmail:destroy()
    RETURN
ENDIF

nNumAttach := oImap:GetMailNumAttach(oEmail)
IF (nNumAttach > 0)
    //  FetchAttachmentString returns a string, so assign it to a string variable.
    cAttachText := oImap:FetchAttachmentString(oEmail, 0, "utf-8")
    IF (oImap:LastMethodSuccess == 0)
        ? oImap:LastErrorText
        oImap:destroy()
        oEmail:destroy()
        RETURN
    ENDIF

    ? cAttachText
ENDIF

nSuccess := oImap:Disconnect()
IF (nSuccess == 0)
    ? oImap:LastErrorText
    oImap:destroy()
    oEmail:destroy()
    RETURN
ENDIF

oImap:destroy()
oEmail:destroy()