Sample code for 30+ languages & platforms
PowerBuilder

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Email
oleobject loo_Sa
integer i
integer li_Count
oleobject loo_Json
string ls_Recipient

li_Success = 0

loo_Email = create oleobject
li_rc = loo_Email.ConnectToNewObject("Chilkat.Email")
if li_rc < 0 then
    destroy loo_Email
    MessageBox("Error","Connecting to COM object failed")
    return
end if

// Load a multipart/report DSN email.
li_Success = loo_Email.LoadEml("qa_data/eml/dsn_example.eml")
if li_Success = 0 then
    Write-Debug loo_Email.LastErrorText
    destroy loo_Email
    return
end if

// ------------------------------------------------------------------------
// The GetDsnFinalRecipients method is deprecated:

loo_Sa = loo_Email.GetDsnFinalRecipients()
if loo_Email.LastMethodSuccess = 0 then
    Write-Debug loo_Email.LastErrorText
    destroy loo_Email
    return
end if

i = 0
li_Count = loo_Sa.Count
do while i < li_Count
    Write-Debug string(i) + ": " + loo_Sa.GetString(i)
    i = i + 1
loop
Write-Debug "----"

destroy loo_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.

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

li_Success = loo_Email.GetDsnInfo(loo_Json)
if li_Success = 0 then
    Write-Debug loo_Email.LastErrorText
    destroy loo_Email
    destroy loo_Json
    return
end if

loo_Json.EmitCompact = 0
Write-Debug loo_Json.Emit()
Write-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
li_Count = loo_Json.SizeOfArray("final-recipient")
do while i < li_Count
    loo_Json.I = i
    ls_Recipient = loo_Json.StringOf("final-recipient[i]")
    Write-Debug string(i) + ": " + ls_Recipient

    i = i + 1
loop

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


destroy loo_Email
destroy loo_Json