Sample code for 30+ languages & platforms
Visual FoxPro

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