Sample code for 30+ languages & platforms
Tcl

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set email [new_CkEmail]

# Load a multipart/report DSN email.
set success [CkEmail_LoadEml $email "qa_data/eml/dsn_example.eml"]
if {$success == 0} then {
    puts [CkEmail_lastErrorText $email]
    delete_CkEmail $email
    exit
}

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

# sa is a CkStringArray
set sa [CkEmail_GetDsnFinalRecipients $email]
if {[CkEmail_get_LastMethodSuccess $email] == 0} then {
    puts [CkEmail_lastErrorText $email]
    delete_CkEmail $email
    exit
}

set i 0
set count [CkStringArray_get_Count $sa]
while {$i < $count} {
    puts "$i: [CkStringArray_getString $sa $i]"
    set i [expr $i + 1]
}
puts "----"

delete_CkStringArray $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.

set json [new_CkJsonObject]

set success [CkEmail_GetDsnInfo $email $json]
if {$success == 0} then {
    puts [CkEmail_lastErrorText $email]
    delete_CkEmail $email
    delete_CkJsonObject $json
    exit
}

CkJsonObject_put_EmitCompact $json 0
puts [CkJsonObject_emit $json]
puts "----"

# 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
set i 0
set count [CkJsonObject_SizeOfArray $json "final-recipient"]
while {$i < $count} {
    CkJsonObject_put_I $json $i
    set recipient [CkJsonObject_stringOf $json "final-recipient[i]"]
    puts "$i: $recipient"

    set i [expr $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--
# 

delete_CkEmail $email
delete_CkJsonObject $json