Sample code for 30+ languages & platforms
PureBasic

Forward by Attaching the Existing Email to a New Email

See more Email Object Examples

Demonstrates how to forward an email by attaching the email to a new email.

This example reads an email from an IMAP server, attaches the email to a new email, and sends the new email.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkImap.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkMailMan.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    ; Read the 1st (most recent) email in an Inbox.
    imap.i = CkImap::ckCreate()
    If imap.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Connect to an IMAP server.
    CkImap::setCkSsl(imap, 1)
    CkImap::setCkPort(imap, 993)
    success = CkImap::ckConnect(imap,"imap.example.com")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ; Login
    success = CkImap::ckLogin(imap,"myLogin","myPassword")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ; Select an IMAP mailbox
    success = CkImap::ckSelectMailbox(imap,"Inbox")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    numEmails.i = CkImap::ckNumMessages(imap)

    ; Fetch the email at the last sequence number.
    ; (We are assuming the Inbox has at least 1 email)

    email.i = CkEmail::ckCreate()
    If email.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkImap::ckFetchEmail(imap,0,numEmails,0,email)
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkEmail::ckDispose(email)
        ProcedureReturn
    EndIf

    ; Disconnect from the IMAP server.
    CkImap::ckDisconnect(imap)

    Debug CkEmail::ckSubject(email)

    ; Create a new email.  The email we just read will be attached to this email.
    eForward.i = CkEmail::ckCreate()
    If eForward.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkEmail::ckAddTo(eForward,"Joe","joe@example.com")

    CkEmail::setCkFromAddress(eForward, "matt@somewhere.com")
    CkEmail::setCkFromName(eForward, "Matt")
    CkEmail::setCkSubject(eForward, "This is an email with another email attached.")

    CkEmail::ckSetHtmlBody(eForward,"<p>Hello, this is an email I'm forwarding to you.  See the attached email.</p>")

    ; Attach the email.
    CkEmail::ckAttachEmail(eForward,email)

    ; We could save the .eml, then double-click on it to view in our mail program, such as Outlook or Thunderbird..
    CkEmail::ckSaveEml(eForward,"qa_output/forward.eml")

    ; We could send (forward) the email..
    mailman.i = CkMailMan::ckCreate()
    If mailman.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkMailMan::setCkSmtpHost(mailman, "smtp.example.com")
    CkMailMan::setCkSmtpUsername(mailman, "myLogin")
    CkMailMan::setCkSmtpPassword(mailman, "myPassword")
    CkMailMan::setCkSmtpPort(mailman, 587)
    CkMailMan::setCkStartTLS(mailman, 1)

    success = CkMailMan::ckSendEmail(mailman,eForward)
    If success = 0
        Debug CkMailMan::ckLastErrorText(mailman)
        CkImap::ckDispose(imap)
        CkEmail::ckDispose(email)
        CkEmail::ckDispose(eForward)
        CkMailMan::ckDispose(mailman)
        ProcedureReturn
    EndIf

    success = CkMailMan::ckCloseSmtpConnection(mailman)
    If success <> 1
        Debug "Connection to SMTP server not closed cleanly."
    EndIf

    Debug "Mail Sent!"


    CkImap::ckDispose(imap)
    CkEmail::ckDispose(email)
    CkEmail::ckDispose(eForward)
    CkMailMan::ckDispose(mailman)


    ProcedureReturn
EndProcedure