Sample code for 30+ languages & platforms
Visual FoxPro Requires Chilkat v11.0.0+

Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo

Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loEmail
LOCAL loSa
LOCAL i
LOCAL lnCount
LOCAL loJson
LOCAL lcRecipient

lnSuccess = 0

loEmail = CreateObject('Chilkat.Email')

*  Load a multipart/report DSN email.
lnSuccess = loEmail.LoadEml("qa_data/eml/dsn_example.eml")
IF (lnSuccess = 0) THEN
    ? loEmail.LastErrorText
    RELEASE loEmail
    CANCEL
ENDIF

*  ------------------------------------------------------------------------
*  The GetDsnFinalRecipients method is deprecated:

loSa = loEmail.GetDsnFinalRecipients()
IF (loEmail.LastMethodSuccess = 0) THEN
    ? loEmail.LastErrorText
    RELEASE loEmail
    CANCEL
ENDIF

i = 0
lnCount = loSa.Count
DO WHILE i < lnCount
    ? STR(i) + ": " + loSa.GetString(i)
    i = i + 1
ENDDO
? "----"

RELEASE loSa

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

loJson = CreateObject('Chilkat.JsonObject')
lnSuccess = loEmail.GetDsnInfo(loJson)
IF (lnSuccess = 0) THEN
    ? loEmail.LastErrorText
    RELEASE loEmail
    RELEASE loJson
    CANCEL
ENDIF

loJson.EmitCompact = 0
? loJson.Emit()
? "----"

*  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
lnCount = loJson.SizeOfArray("final-recipient")
DO WHILE i < lnCount
    loJson.I = i
    lcRecipient = loJson.StringOf("final-recipient[i]")
    ? STR(i) + ": " + lcRecipient

    i = i + 1
ENDDO

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

RELEASE loEmail
RELEASE loJson