Sample code for 30+ languages & platforms
Unicode C++

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat Unicode C++ Downloads

Unicode C++
#include <CkEmailW.h>
#include <CkStringArrayW.h>
#include <CkJsonObjectW.h>

void ChilkatSample(void)
    {
    bool success = false;

    CkEmailW email;

    // Load a multipart/report DSN email.
    success = email.LoadEml(L"qa_data/eml/dsn_example.eml");
    if (success == false) {
        wprintf(L"%s\n",email.lastErrorText());
        return;
    }

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

    CkStringArrayW *sa = email.GetDsnFinalRecipients();
    if (email.get_LastMethodSuccess() == false) {
        wprintf(L"%s\n",email.lastErrorText());
        return;
    }

    int i = 0;
    int count = sa->get_Count();
    while (i < count) {
        wprintf(L"%d: %s\n",i,sa->getString(i));
        i = i + 1;
    }

    wprintf(L"----\n");

    delete 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.

    CkJsonObjectW json;
    success = email.GetDsnInfo(json);
    if (success == false) {
        wprintf(L"%s\n",email.lastErrorText());
        return;
    }

    json.put_EmitCompact(false);
    wprintf(L"%s\n",json.emit());
    wprintf(L"----\n");

    // 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(L"final-recipient");
    while (i < count) {
        json.put_I(i);
        const wchar_t *recipient = json.stringOf(L"final-recipient[i]");
        wprintf(L"%d: %s\n",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--
    // 
    }