C
C
Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo
Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.Chilkat C Downloads
#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);
}