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

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat CkPython Downloads

CkPython
import sys
import chilkat

success = False

email = chilkat.CkEmail()

#  Load a multipart/report DSN email.
success = email.LoadEml("qa_data/eml/dsn_example.eml")
if (success == False):
    print(email.lastErrorText())
    sys.exit()

#  ------------------------------------------------------------------------
#  The GetDsnFinalRecipients method is deprecated:

# sa is a CkStringArray
sa = email.GetDsnFinalRecipients()
if (email.get_LastMethodSuccess() == False):
    print(email.lastErrorText())
    sys.exit()

i = 0
count = sa.get_Count()
while i < count :
    print(str(i) + ": " + sa.getString(i))
    i = i + 1

print("----")

#  ------------------------------------------------------------------------
#  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 = chilkat.CkJsonObject()
success = email.GetDsnInfo(json)
if (success == False):
    print(email.lastErrorText())
    sys.exit()

json.put_EmitCompact(False)
print(json.emit())
print("----")

#  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 = json.SizeOfArray("final-recipient")
while i < count :
    json.put_I(i)
    recipient = json.stringOf("final-recipient[i]")
    print(str(i) + ": " + recipient)

    i = i + 1

#  -------------------------------------------------------------------------------------------
#  -------------------------------------------------------------------------------------------
#  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--
#