Sample code for 30+ languages & platforms
C

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat C Downloads

C
#include <C_CkEmail.h>
#include <C_CkStringArray.h>
#include <C_CkJsonObject.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkEmail email;
    HCkStringArray sa;
    int i;
    int count;
    HCkJsonObject json;
    const char *recipient;

    success = FALSE;

    email = CkEmail_Create();

    //  Load a multipart/report DSN email.
    success = CkEmail_LoadEml(email,"qa_data/eml/dsn_example.eml");
    if (success == FALSE) {
        printf("%s\n",CkEmail_lastErrorText(email));
        CkEmail_Dispose(email);
        return;
    }

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

    sa = CkEmail_GetDsnFinalRecipients(email);
    if (CkEmail_getLastMethodSuccess(email) == FALSE) {
        printf("%s\n",CkEmail_lastErrorText(email));
        CkEmail_Dispose(email);
        return;
    }

    i = 0;
    count = CkStringArray_getCount(sa);
    while (i < count) {
        printf("%d: %s\n",i,CkStringArray_getString(sa,i));
        i = i + 1;
    }

    printf("----\n");

    CkStringArray_Dispose(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 = CkJsonObject_Create();
    success = CkEmail_GetDsnInfo(email,json);
    if (success == FALSE) {
        printf("%s\n",CkEmail_lastErrorText(email));
        CkEmail_Dispose(email);
        CkJsonObject_Dispose(json);
        return;
    }

    CkJsonObject_putEmitCompact(json,FALSE);
    printf("%s\n",CkJsonObject_emit(json));
    printf("----\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 = CkJsonObject_SizeOfArray(json,"final-recipient");
    while (i < count) {
        CkJsonObject_putI(json,i);
        recipient = CkJsonObject_stringOf(json,"final-recipient[i]");
        printf("%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--
    //  


    CkEmail_Dispose(email);
    CkJsonObject_Dispose(json);

    }