Sample code for 30+ languages & platforms
PureBasic

Create a Multipart-Mixed MIME Message

See more MIME Examples

Creates a multipart-mixed MIME message with the 1st part containing plain-text, and the 2nd part containing a GIF image.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkMime.pb"

Procedure ChilkatExample()

    success.i = 0

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

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

    ; Initialize a multipart-mixed MIME message:
    success = CkMime::ckNewMultipartMixed(mime)

    ; Each sub-part will be prepared, then added to the 
    ; top-level multipart/mixed MIME object, and then written
    ; to a file.

    ; First the plain-text sub-part
    ; Add a few header fields:
    textPart.i = CkMime::ckCreate()
    If textPart.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkMime::ckAddHeaderField(textPart,"Description","this is a test")
    success = CkMime::ckAddHeaderField(textPart,"MyId","123")
    success = CkMime::ckSetBodyFromPlainText(textPart,"This is the plain-text body")

    ; Now for a GIF image:
    imagePart.i = CkMime::ckCreate()
    If imagePart.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkMime::ckSetBodyFromFile(imagePart,"starfish.gif")
    If success = 0
        Debug CkMime::ckLastErrorText(imagePart)
        CkMime::ckDispose(mime)
        CkMime::ckDispose(textPart)
        CkMime::ckDispose(imagePart)
        ProcedureReturn
    EndIf

    ; Append each sub-part to the top-level MIME object:
    success = CkMime::ckAppendPart(mime,textPart)
    success = CkMime::ckAppendPart(mime,imagePart)

    ; Write the full multipart-mixed MIME to a file.
    success = CkMime::ckSaveMime(mime,"out.mim")
    If success = 0
        Debug CkMime::ckLastErrorText(mime)
        CkMime::ckDispose(mime)
        CkMime::ckDispose(textPart)
        CkMime::ckDispose(imagePart)
        ProcedureReturn
    EndIf

    Debug CkMime::ckGetMime(mime)

    ; The MIME should look something like this:
    ; (See more comments following this sample output...)

    ; Content-Type: multipart/mixed;
    ;  boundary="------------080503030004040303020208"
    ; 
    ; This is a multi-part message in MIME format.
    ; 
    ; --------------080503030004040303020208
    ; Description: this is a test
    ; MyId: 123
    ; Content-Type: text/plain
    ; Content-Transfer-Encoding: 7bit
    ; 
    ; This is the plain-text body
    ; --------------080503030004040303020208
    ; Content-Disposition: attachment; filename="starfish.gif"
    ; Content-Transfer-Encoding: base64
    ; Content-Type: image/gif; name="starfish.gif"
    ; 
    ; R0lGODlhIAAgAPcAAP///+/v7/f39+/n5/fv7//39/fn597OzufW1tbGxs69vffe3u/W1salpZQQ
    ; EIQYEJwQCJQYCJwYCM6clL2Ee5wpGIwhEK0YANatpdalnHMYCKUhCJQYAKUYAM6Ec5QhCJwhCPfW
    ; zu/Oxta1rb17a6UhAK0hAPe9rb2Ec7V7a71rUpwpCL0xCJwhAOfOxta9tcatpdallM6cjMaUhK1C
    ; IZwxELU5EK0xCLUxCN61pcacjK1rUrVaOaVKKZxCIZwxCKUxCL05CLUxAM6llO+1nMZzUr1rSrVS
    ; KaVCGK1CGLVCEJQxCK05CLU5CIwpAKUxAK0xAM69tffWxrVrSrVaMbVKGMZKEL1CCLU5AP/v597O
    ; xufGtcallNaljLWEa96ce9aUc717Wq1aMcZjMbVaKbVSIa1KGL1SGJw5CK1CCLVCCMZKCM5KCMZC
    ; APfn3tbGvc57Ss5aGMZSENZaEL1KCM5SCLVCAMZKAPfezvfOte/GrdatlN6cc9aEUr1rOc5jIdZj
    ; GL1SEM5aELVKCMZSCNZaCL1KAOfOvc57Qs5jGNZjEM5aCMZSAN5aAO/OtefGrcZjGM5jEN5rELVS
    ; CMZaCN5jCOdrCM5aAO/Gpc5rGMZjENZrEN5jAOdrAOfe1t6MQtZ7Kd57IdZzGM5rEMZjCNZrCM5j
    ; ANbOxu/Wve+9jPe9hO+1e+etc85zGO+EGMZrENZzEM5rCN5zCO97COdzAO/n3u+1c+ecSt6UQs57
    ; Ie+MIdZ7GOeEGM5zEO+EELVjCOd7CO+ECOd7AO/Ope+tWuelUu+UKeeMGOeEEO+MEOeECO+EAO/G
    ; jO+cKfeUEO+MCO+tSuecMeeUGN6MEOeMCO+UCO+tQuelOe+lMe+lKe+cGOeUEO+cEOeUCN6MAO+U
    ; AOe9c/e1Oe+lId6UEO+cCPe9Qve1Me+lEOecCO+lCOe1Su+1OeelGO+tGPetCPetAO+9Qve1GO+1
    ; EPe9CPe9APf37+fv5/f//+/v9/fv9+fe5+/e5869xufW3t7GzgAAACwAAAAAIAAgAAAI/wABCBxI
    ; sKDBgwgTFgCwMKHDhwyHYWoIsWIBZsdyHaoIcaGbaNQ0ZeBYEROvV0pmCCDp8B4rZaOUcGHpcIEx
    ; aqPMYLjHMcsCAwgxkRv3q8wLnhAdfWpmDRwqAgQFEEvHLlCZNxwfpVmkDJ04dczc3LsXQtq4XWh8
    ; aGH48F49FDUC9UInT941W6luCUOWyQmSLST3eUnChNS4c9SooQuGDNkrIIrA1MqXr0A+AyFC4Kln
    ; kMAQKljotJJGDZklS9PkyEHGLZu1ctbCmWvXThurfAbvHSii5kegxpYqtRpEKFnid/TSneu2LRYh
    ; P/0Q1tJRgYOZV71UL5LEK1KiV68yVf+xgaOKmAZICd5bmA8FEyZQlMjRRAhQGQv4QQSJL8ZLFHwP
    ; 6aFIJXNIEkggcgQhwYIlKEFFGDKcEgBCBVCkByC0IAMJGnSAYsUNEmzAgw4HBJBeQisZcAswjqGh
    ; wQeBKGIFFD0ocCJE9diyjTKRLPHBAx/cEAcdgxgx4Vg3HnSPKs4E00sNEYDwgQksQDLJIohMSJIj
    ; ugSTCRA/ILFDCjTckUkrpYiCAEluYCMLJCsoMQUM9gjQRSSL7CLJJjmQxMw3kQChxA78IFULHIK0
    ; MgonXyR5UAHWVBKIEmEcUJAIYxgSSSF94AZRPrgsQgUF0RmUgWpy/LFmRYdMkACAANwrWA8cbAhi
    ; RZ8cjRWro0QEEsQVGTiKkLAM5QNGFWrAQFNLBIzABQPLRktQQAA7
    ; 
    ; --------------080503030004040303020208--
    ; 
    ; 

    ; To explicitly set the boundary, set the Boundary property, like this:
    CkMime::setCkBoundary(mime, "SOME_UNIQUE_BOUNDARY_STRING")

    ; To eliminate the "This is a multi-part message in MIME format."
    ; from the output, set the UseMmDescription property = 0
    CkMime::setCkUseMmDescription(mime, 0)

    Debug CkMime::ckGetMime(mime)

    ; The MIME now looks like this:

    ; Content-Type: multipart/mixed;
    ;  boundary="SOME_UNIQUE_BOUNDARY_STRING"
    ; 
    ; --SOME_UNIQUE_BOUNDARY_STRING
    ; Description: this is a test
    ; MyId: 123
    ; Content-Type: text/plain
    ; Content-Transfer-Encoding: 7bit
    ; 
    ; This is the plain-text body
    ; --SOME_UNIQUE_BOUNDARY_STRING
    ; Content-Disposition: attachment; filename="starfish.gif"
    ; Content-Transfer-Encoding: base64
    ; Content-Type: image/gif; name="starfish.gif"
    ; 
    ; R0lGODlhIAAgAPcAAP///+/v7/f39+/n5/fv7//39/fn597OzufW1tbGxs69vffe3u/W1salpZQQ
    ; EIQYEJwQCJQYCJwYCM6clL2Ee5wpGIwhEK0YANatpdalnHMYCKUhCJQYAKUYAM6Ec5QhCJwhCPfW
    ; zu/Oxta1rb17a6UhAK0hAPe9rb2Ec7V7a71rUpwpCL0xCJwhAOfOxta9tcatpdallM6cjMaUhK1C
    ; IZwxELU5EK0xCLUxCN61pcacjK1rUrVaOaVKKZxCIZwxCKUxCL05CLUxAM6llO+1nMZzUr1rSrVS
    ; KaVCGK1CGLVCEJQxCK05CLU5CIwpAKUxAK0xAM69tffWxrVrSrVaMbVKGMZKEL1CCLU5AP/v597O
    ; xufGtcallNaljLWEa96ce9aUc717Wq1aMcZjMbVaKbVSIa1KGL1SGJw5CK1CCLVCCMZKCM5KCMZC
    ; APfn3tbGvc57Ss5aGMZSENZaEL1KCM5SCLVCAMZKAPfezvfOte/GrdatlN6cc9aEUr1rOc5jIdZj
    ; GL1SEM5aELVKCMZSCNZaCL1KAOfOvc57Qs5jGNZjEM5aCMZSAN5aAO/OtefGrcZjGM5jEN5rELVS
    ; CMZaCN5jCOdrCM5aAO/Gpc5rGMZjENZrEN5jAOdrAOfe1t6MQtZ7Kd57IdZzGM5rEMZjCNZrCM5j
    ; ANbOxu/Wve+9jPe9hO+1e+etc85zGO+EGMZrENZzEM5rCN5zCO97COdzAO/n3u+1c+ecSt6UQs57
    ; Ie+MIdZ7GOeEGM5zEO+EELVjCOd7CO+ECOd7AO/Ope+tWuelUu+UKeeMGOeEEO+MEOeECO+EAO/G
    ; jO+cKfeUEO+MCO+tSuecMeeUGN6MEOeMCO+UCO+tQuelOe+lMe+lKe+cGOeUEO+cEOeUCN6MAO+U
    ; AOe9c/e1Oe+lId6UEO+cCPe9Qve1Me+lEOecCO+lCOe1Su+1OeelGO+tGPetCPetAO+9Qve1GO+1
    ; EPe9CPe9APf37+fv5/f//+/v9/fv9+fe5+/e5869xufW3t7GzgAAACwAAAAAIAAgAAAI/wABCBxI
    ; sKDBgwgTFgCwMKHDhwyHYWoIsWIBZsdyHaoIcaGbaNQ0ZeBYEROvV0pmCCDp8B4rZaOUcGHpcIEx
    ; aqPMYLjHMcsCAwgxkRv3q8wLnhAdfWpmDRwqAgQFEEvHLlCZNxwfpVmkDJ04dczc3LsXQtq4XWh8
    ; aGH48F49FDUC9UInT941W6luCUOWyQmSLST3eUnChNS4c9SooQuGDNkrIIrA1MqXr0A+AyFC4Kln
    ; kMAQKljotJJGDZklS9PkyEHGLZu1ctbCmWvXThurfAbvHSii5kegxpYqtRpEKFnid/TSneu2LRYh
    ; P/0Q1tJRgYOZV71UL5LEK1KiV68yVf+xgaOKmAZICd5bmA8FEyZQlMjRRAhQGQv4QQSJL8ZLFHwP
    ; 6aFIJXNIEkggcgQhwYIlKEFFGDKcEgBCBVCkByC0IAMJGnSAYsUNEmzAgw4HBJBeQisZcAswjqGh
    ; wQeBKGIFFD0ocCJE9diyjTKRLPHBAx/cEAcdgxgx4Vg3HnSPKs4E00sNEYDwgQksQDLJIohMSJIj
    ; ugSTCRA/ILFDCjTckUkrpYiCAEluYCMLJCsoMQUM9gjQRSSL7CLJJjmQxMw3kQChxA78IFULHIK0
    ; MgonXyR5UAHWVBKIEmEcUJAIYxgSSSF94AZRPrgsQgUF0RmUgWpy/LFmRYdMkACAANwrWA8cbAhi
    ; RZ8cjRWro0QEEsQVGTiKkLAM5QNGFWrAQFNLBIzABQPLRktQQAA7
    ; 
    ; --SOME_UNIQUE_BOUNDARY_STRING--


    CkMime::ckDispose(mime)
    CkMime::ckDispose(textPart)
    CkMime::ckDispose(imagePart)


    ProcedureReturn
EndProcedure