Sample code for 30+ languages & platforms
DataFlex

Add a PFX Source (BinData) for S/MIME Decryption

See more IMAP Examples

Demonstrates the Chilkat Imap.AddPfxSourceBd method, which adds PFX data held in a BinData as a source of certificates and private keys for S/MIME processing. The first argument is the BinData and the second is the PFX password. Call it once for each additional source.

Note: The certificate path is relative to the application's current working directory. Supply the path to your own certificate file.

Background: When downloading encrypted (S/MIME) email, Chilkat needs the recipient's private key to decrypt it. Adding one or more PFX sources gives Chilkat a pool of keys to search; the matching key is used automatically as messages are fetched. The BinData form is handy when the PFX comes from memory — a database blob or a downloaded buffer — rather than a file on disk. On Windows and macOS the system certificate stores are also searched automatically.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoImap
    Variant vBdPfx
    Handle hoBdPfx
    String sPfxPassword
    String sTemp1

    Move False To iSuccess

    //  Demonstrates the Imap.AddPfxSourceBd method, which adds PFX data (from a BinData) as a
    //  source of certificates and private keys for S/MIME decryption.  The 1st argument is the
    //  BinData containing the PFX, and the 2nd is the PFX password.

    Get Create (RefClass(cComChilkatImap)) To hoImap
    If (Not(IsComObjectCreated(hoImap))) Begin
        Send CreateComObject of hoImap
    End

    Set ComSsl Of hoImap To True
    Set ComPort Of hoImap To 993

    Get ComConnect Of hoImap "imap.example.com" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComLogin Of hoImap "user@example.com" "myPassword" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Load the PFX data into a BinData.
    Get Create (RefClass(cComChilkatBinData)) To hoBdPfx
    If (Not(IsComObjectCreated(hoBdPfx))) Begin
        Send CreateComObject of hoBdPfx
    End
    Get ComLoadFile Of hoBdPfx "qa_data/smime.pfx" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoBdPfx To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  The PFX password is not hard-coded in source.  Insert code here to obtain it from an
    //  interactive prompt, environment variable, or a secrets vault.

    //  Add the PFX as a source for S/MIME certificates and private keys.  Call once per source.
    Get pvComObject of hoBdPfx to vBdPfx
    Get ComAddPfxSourceBd Of hoImap vBdPfx sPfxPassword To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    //  Messages downloaded after this are automatically decrypted when a matching key is found.

    Get ComDisconnect Of hoImap To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End



End_Procedure