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

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 Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  final email = CkEmail();

  email.subject = 'Test';
  email.from = 'joe@example.com';
  email.body = 'This is a test';
  email.addTo('', 'recipient@example.com');

  print(email.getMime());
  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)

  final xml = CkXml();
  xml.tag = 'DeliveryStatusFields';
  xml.newChild2('Final-Recipient', 'rfc822; recipient@example.com');
  xml.newChild2('Action', 'failed');
  xml.newChild2('Status', '5.1.2');
  xml.newChild2('Diagnostic-Code', 'smtp; 550 5.1.2 Host unknown (Domain name not found)');
  final dtNow = CkDateTime();
  dtNow.setFromCurrentSystemTime();
  xml.newChild2('Last-Attempt-Date', dtNow.getAsRfc822(true));

  final headerOnly = true;
  final sbText = CkStringBuilder();
  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');

  final explain = sbText.getAsString();

  final dsnEmail = CkEmail();
  try {
    email.toDsn(explain, xml.getXml(), headerOnly, dsnEmail);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print(dsnEmail.getMime());

  // 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--
}