Sample code for 30+ languages & platforms
DataFlex

Get a Header Attribute of a Related Item

See more Email Object Examples

Demonstrates the Chilkat Email.GetRelatedAttr method, which returns a header-field attribute value from a header field of the Nth related item. The first argument is the zero-based related-item index, the second names a header field, and the third names an attribute within it. This example loads an image from a file into a BinData object, adds it as a related item with AddRelatedBd (capturing the generated Content-ID and referencing it from the HTML), then reads the name attribute of the related item's Content-Type header.

Background: Related items (inline images, style sheets) are MIME parts whose headers may carry named parameters — for instance Content-Type: image/png; name="logo.png". Because an image is binary, it is loaded into a BinData object (here from a file) and added with AddRelatedBd, rather than being treated as text. GetRelatedAttr then extracts one named attribute from a chosen header of a specific related part, the related-item analogue of GetAttachmentAttr, so you don't have to parse the raw header yourself.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoEmail
    Variant vBdImage
    Handle hoBdImage
    String sCid
    Handle hoSbHtml
    Integer iNumReplaced
    String sVal
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    //  Demonstrates the GetRelatedAttr method, which returns a header-field attribute value
    //  from a header field of the Nth related item.  The first argument is the zero-based related-item
    //  index, the second is the header field name, and the third is the attribute name.

    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End
    Set ComSubject Of hoEmail To "GetRelatedAttr example"

    //  Load the image data from a file into a BinData object.
    Get Create (RefClass(cComChilkatBinData)) To hoBdImage
    If (Not(IsComObjectCreated(hoBdImage))) Begin
        Send CreateComObject of hoBdImage
    End
    Get ComLoadFile Of hoBdImage "qa_data/images/logo.png" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoBdImage To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Add the image as a related item from the BinData; capture its generated Content-ID.
    Get pvComObject of hoBdImage to vBdImage
    Get ComAddRelatedBd Of hoEmail "logo.png" vBdImage To sCid
    Get ComLastMethodSuccess Of hoEmail To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoEmail To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Reference the related item in the HTML body by its Content-ID.
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbHtml
    If (Not(IsComObjectCreated(hoSbHtml))) Begin
        Send CreateComObject of hoSbHtml
    End
    Get ComAppend Of hoSbHtml '<html><body><img src="cid:PLACEHOLDER_CID"/></body></html>' To iSuccess
    Get ComReplace Of hoSbHtml "PLACEHOLDER_CID" sCid To iNumReplaced
    Get ComGetAsString Of hoSbHtml To sTemp1
    Send ComSetHtmlBody To hoEmail sTemp1

    //  Get the "name" attribute of the related item's Content-Type header (index 0).
    Get ComGetRelatedAttr Of hoEmail 0 "Content-Type" "name" To sVal
    Showln "Related item Content-Type name attribute: " sVal

    //  Note: The path "qa_data/images/logo.png" is a relative local filesystem path,
    //  relative to the current working directory of the running application.


End_Procedure