Lua Requires Chilkat v11.0.0+
Lua
Create DSN (Delivery Status Notification) Email
See more Email Object Examples
Demonstrates how to create a DSN (Delivery Status Notification) Email having the format as defined in RFC 3464.Chilkat Lua Downloads
local chilkat = require("chilkat")
local email = chilkat.Email.new()
email.subject = "Test"
email.from = "joe@example.com"
email.body = "This is a test"
email:add_to("", "recipient@example.com")
print(email:get_mime())
print("")
print("-------------------------------------------------------------")
print("")
-- This is the email we just created:
-- MIME-Version: 1.0
-- Date: Mon, 12 May 2025 11:13:15 -0500
-- Message-ID: <917FA49F75544EF51948B0A52F403B925B51073F@SLICE>
-- Content-Type: text/plain; charset=us-ascii; format=flowed
-- Content-Transfer-Encoding: 7bit
-- X-Priority: 3 (Normal)
-- Subject: Test
-- From: joe@example.com
-- To: recipient@example.com
--
-- This is a test
-- -----------------------------------------------------------------
-- Convert the above email into a DSN (Delivery Status Notification)
local xml = chilkat.Xml.new()
xml.tag = "DeliveryStatusFields"
xml:new_child2("Final-Recipient", "rfc822; recipient@example.com")
xml:new_child2("Action", "failed")
xml:new_child2("Status", "5.1.2")
xml:new_child2("Diagnostic-Code", "smtp; 550 5.1.2 Host unknown (Domain name not found)")
local dtNow = chilkat.DateTime.new()
dtNow:set_from_current_system_time()
xml:new_child2("Last-Attempt-Date", dtNow:get_as_rfc822(true))
local headerOnly = true
local sbText = chilkat.StringBuilder.new()
sbText:append("This is an automatically generated Delivery Status Notification.\r\n\r\n")
sbText:append("Delivery to the following recipient failed permanently:\r\n\r\n")
sbText:append(" recipient@example.com\r\n\r\n")
sbText:append("Technical details of permanent failure:\r\n")
sbText:append("DNS Error: Domain name not found\r\n")
local explain = sbText:get_as_string()
local dsnEmail = chilkat.Email.new()
local success = email:to_dsn(explain, xml:get_xml(), headerOnly, dsnEmail)
if not success then
print(email.last_error_text)
return
end
print(dsnEmail:get_mime())
-- Here's the MIME of the DNS email we just created:
-- -------------------------------------------------
-- Content-Type: multipart/report; report-type="delivery-status"; boundary="------------060100020300020303000802"
--
-- --------------060100020300020303000802
-- Content-Type: text/plain; charset=windows-1252; format=flowed
-- Content-Transfer-Encoding: 7bit
--
-- This is an automatically generated Delivery Status Notification.
--
-- Delivery to the following recipient failed permanently:
--
-- recipient@example.com
--
-- Technical details of permanent failure:
-- DNS Error: Domain name not found
--
-- --------------060100020300020303000802
-- Content-Type: message/delivery-status
--
-- Final-Recipient: rfc822; recipient@example.com
-- Action: failed
-- Status: 5.1.2
-- Diagnostic-Code: smtp; 550 5.1.2 Host unknown (Domain name not found)
-- Last-Attempt-Date: Mon, 12 May 2025 11:30:39 -0500
--
-- --------------060100020300020303000802
-- Content-Type: text/rfc822-headers; charset=windows-1252
--
-- MIME-Version: 1.0
-- Date: Mon, 12 May 2025 11:30:39 -0500
-- Message-ID: <B8E6875D582A78AE779FC0B46ACC8C858CEAF608@SLICE>
-- Content-Type: text/plain; charset=us-ascii; format=flowed
-- Content-Transfer-Encoding: 7bit
-- X-Priority: 3 (Normal)
-- Subject: Test
-- From: joe@example.com
-- To: recipient@example.com
-- --------------060100020300020303000802--