Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.0.0+

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkJsonObject.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkStringArray.pb"

Procedure ChilkatExample()

    success.i = 0

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

    ;  Load a multipart/report DSN email.
    success = CkEmail::ckLoadEml(email,"qa_data/eml/dsn_example.eml")
    If success = 0
        Debug CkEmail::ckLastErrorText(email)
        CkEmail::ckDispose(email)
        ProcedureReturn
    EndIf

    ;  ------------------------------------------------------------------------
    ;  The GetDsnFinalRecipients method is deprecated:

    sa.i = CkEmail::ckGetDsnFinalRecipients(email)
    If CkEmail::ckLastMethodSuccess(email) = 0
        Debug CkEmail::ckLastErrorText(email)
        CkEmail::ckDispose(email)
        ProcedureReturn
    EndIf

    i.i = 0
    count.i = CkStringArray::ckCount(sa)
    While i < count
        Debug Str(i) + ": " + CkStringArray::ckGetString(sa,i)
        i = i + 1
    Wend
    Debug "----"

    CkStringArray::ckDispose(sa)

    ;  ------------------------------------------------------------------------
    ;  Do the equivalent using GetDsnInfo.
    ;  Your application creates a new, empty JsonObject object which is passed 
    ;  in the last argument and filled upon success.

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

    success = CkEmail::ckGetDsnInfo(email,json)
    If success = 0
        Debug CkEmail::ckLastErrorText(email)
        CkEmail::ckDispose(email)
        CkJsonObject::ckDispose(json)
        ProcedureReturn
    EndIf

    CkJsonObject::setCkEmitCompact(json, 0)
    Debug CkJsonObject::ckEmit(json)
    Debug "----"

    ;  The JSON contains the following:

    ;  {
    ;    "reporting-mta": "dns; mail.example.com",
    ;    "received-from-mta": "dns; smtp.example.com",
    ;    "arrival-date": "Fri, 8 May 2025 14:23:42 -0400",
    ;    "final-recipient": [
    ;      "rfc822; alice@example.com",
    ;      "rfc822; bob@example.com",
    ;      "rfc822; carol@example.com"
    ;    ],
    ;    "action": "failed",
    ;    "status": "5.1.1",
    ;    "remote-mta": "dns; smtp.recipientdomain.com",
    ;    "diagnostic-code": "smtp; 550 5.1.1 User unknown",
    ;    "last-attempt-date": "Fri, 8 May 2025 14:23:42 -0400",
    ;    "action": "failed",
    ;    "status": "5.1.2",
    ;    "remote-mta": "dns; smtp.recipientdomain.com",
    ;    "diagnostic-code": "smtp; 550 5.1.2 Host unknown (Domain name not found)",
    ;    "last-attempt-date": "Fri, 8 May 2025 14:23:42 -0400",
    ;    "action": "failed",
    ;    "status": "5.7.1",
    ;    "remote-mta": "dns; smtp.recipientdomain.com",
    ;    "diagnostic-code": "smtp; 550 5.7.1 Relay access denied",
    ;    "last-attempt-date": "Fri, 8 May 2025 14:23:42 -0400"
    ;  }

    ;  Iterate over the final-recipients
    i = 0
    count = CkJsonObject::ckSizeOfArray(json,"final-recipient")
    While i < count
        CkJsonObject::setCkI(json, i)
        recipient.s = CkJsonObject::ckStringOf(json,"final-recipient[i]")
        Debug Str(i) + ": " + recipient

        i = i + 1
    Wend

    ;  -------------------------------------------------------------------------------------------
    ;  -------------------------------------------------------------------------------------------
    ;  This is the contents of the dsn_example.eml used for this example:

    ;  From: postmaster@example.com
    ;  To: sender@example.com
    ;  Subject: Delivery Status Notification (Failure)
    ;  MIME-Version: 1.0
    ;  Content-Type: multipart/report; report-type=delivery-status;
    ;      boundary="boundary-string"
    ;  
    ;  --boundary-string
    ;  Content-Type: text/plain; charset=us-ascii
    ;  
    ;  This is an automatically generated Delivery Status Notification.
    ;  
    ;  Delivery to the following recipients failed permanently:
    ;  
    ;      alice@example.com
    ;      bob@example.com
    ;      carol@example.com
    ;  
    ;  Technical details of permanent failure:
    ;  DNS Error: Domain name not found
    ;  
    ;  --boundary-string
    ;  Content-Type: message/delivery-status
    ;  
    ;  Reporting-MTA: dns; mail.example.com
    ;  Received-From-MTA: dns; smtp.example.com
    ;  Arrival-Date: Fri, 8 May 2025 14:23:42 -0400
    ;  
    ;  Final-Recipient: rfc822; alice@example.com
    ;  Action: failed
    ;  Status: 5.1.1
    ;  Remote-MTA: dns; smtp.recipientdomain.com
    ;  Diagnostic-Code: smtp; 550 5.1.1 User unknown
    ;  Last-Attempt-Date: Fri, 8 May 2025 14:23:42 -0400
    ;  
    ;  Final-Recipient: rfc822; bob@example.com
    ;  Action: failed
    ;  Status: 5.1.2
    ;  Remote-MTA: dns; smtp.recipientdomain.com
    ;  Diagnostic-Code: smtp; 550 5.1.2 Host unknown (Domain name not found)
    ;  Last-Attempt-Date: Fri, 8 May 2025 14:23:42 -0400
    ;  
    ;  Final-Recipient: rfc822; carol@example.com
    ;  Action: failed
    ;  Status: 5.7.1
    ;  Remote-MTA: dns; smtp.recipientdomain.com
    ;  Diagnostic-Code: smtp; 550 5.7.1 Relay access denied
    ;  Last-Attempt-Date: Fri, 8 May 2025 14:23:42 -0400
    ;  
    ;  --boundary-string
    ;  Content-Type: message/rfc822
    ;  
    ;  Return-Path: <sender@example.com>
    ;  Received: from smtp.example.com (smtp.example.com [192.168.1.10])
    ;      by mail.example.com (Postfix) with ESMTP id 123456789
    ;      for <alice@example.com>, <bob@example.com>, <carol@example.com>;
    ;      Fri, 8 May 2025 14:23:42 -0400
    ;  Message-ID: <001a113d789f$ad34bc30$038e34b0$@example.com>
    ;  From: Sender Name <sender@example.com>
    ;  To: alice@example.com, bob@example.com, carol@example.com
    ;  Subject: Test Message
    ;  Date: Fri, 8 May 2025 14:20:00 -0400
    ;  Content-Type: text/plain; charset="us-ascii"
    ;  
    ;  This is a test email message sent to multiple recipients.
    ;  --boundary-string--
    ;  


    CkEmail::ckDispose(email)
    CkJsonObject::ckDispose(json)


    ProcedureReturn
EndProcedure