Sample code for 30+ languages & platforms
Objective-C

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat Objective-C Downloads

Objective-C
#import <CkoEmail.h>
#import <CkoStringArray.h>
#import <CkoJsonObject.h>
#import <NSString.h>

BOOL success = NO;

CkoEmail *email = [[CkoEmail alloc] init];

//  Load a multipart/report DSN email.
success = [email LoadEml: @"qa_data/eml/dsn_example.eml"];
if (success == NO) {
    NSLog(@"%@",email.LastErrorText);
    return;
}

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

CkoStringArray *sa = [email GetDsnFinalRecipients];
if (email.LastMethodSuccess == NO) {
    NSLog(@"%@",email.LastErrorText);
    return;
}

int i = 0;
int count = [sa.Count intValue];
while (i < count) {
    NSLog(@"%d%@%@",i,@": ",[sa GetString: [NSNumber numberWithInt: i]]);
    i = i + 1;
}

NSLog(@"%@",@"----");

//  ------------------------------------------------------------------------
//  Do the equivalent using GetDsnInfo.
//  Your application creates a new, empty JsonObject object which is passed 
//  in the last argument and filled upon success.

CkoJsonObject *json = [[CkoJsonObject alloc] init];
success = [email GetDsnInfo: json];
if (success == NO) {
    NSLog(@"%@",email.LastErrorText);
    return;
}

json.EmitCompact = NO;
NSLog(@"%@",[json Emit]);
NSLog(@"%@",@"----");

//  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"] intValue];
while (i < count) {
    json.I = [NSNumber numberWithInt: i];
    NSString *recipient = [json StringOf: @"final-recipient[i]"];
    NSLog(@"%d%@%@",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--
//