PureBasic
PureBasic
Transition from Email.GetDsnFinalRecipients to Email.GetDsnInfo
Provides instructions for replacing deprecated GetDsnFinalRecipients method calls with GetDsnInfo.Chilkat PureBasic Downloads
IncludeFile "CkJsonObject.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkStringArray.pb"
Procedure ChilkatExample()
success.i = 0
email.i = CkEmail::ckCreate()
If email.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Load a multipart/report DSN email.
success = CkEmail::ckLoadEml(email,"qa_data/eml/dsn_example.eml")
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkEmail::ckDispose(email)
ProcedureReturn
EndIf
; ------------------------------------------------------------------------
; The GetDsnFinalRecipients method is deprecated:
sa.i = CkEmail::ckGetDsnFinalRecipients(email)
If CkEmail::ckLastMethodSuccess(email) = 0
Debug CkEmail::ckLastErrorText(email)
CkEmail::ckDispose(email)
ProcedureReturn
EndIf
i.i = 0
count.i = CkStringArray::ckCount(sa)
While i < count
Debug Str(i) + ": " + CkStringArray::ckGetString(sa,i)
i = i + 1
Wend
Debug "----"
CkStringArray::ckDispose(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.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkEmail::ckGetDsnInfo(email,json)
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkEmail::ckDispose(email)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndIf
CkJsonObject::setCkEmitCompact(json, 0)
Debug CkJsonObject::ckEmit(json)
Debug "----"
; 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::ckSizeOfArray(json,"final-recipient")
While i < count
CkJsonObject::setCkI(json, i)
recipient.s = CkJsonObject::ckStringOf(json,"final-recipient[i]")
Debug Str(i) + ": " + recipient
i = i + 1
Wend
; -------------------------------------------------------------------------------------------
; -------------------------------------------------------------------------------------------
; 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::ckDispose(email)
CkJsonObject::ckDispose(json)
ProcedureReturn
EndProcedure