Sample code for 30+ languages & platforms
Java 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 Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.DateTime;
import com.chilkatsoft.chilkat2.Email;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.Xml;

public class ChilkatExample {

    public static void main(String[] args) {
        Email email = new Email();

        email.setSubject("Test");
        email.setFrom("joe@example.com");
        email.setBody("This is a test");
        email.addTo("", "recipient@example.com");

        System.out.println(email.getMime());
        System.out.println("");
        System.out.println("-------------------------------------------------------------");
        System.out.println("");

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

        Xml xml = new Xml();
        xml.setTag("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)");
        DateTime dtNow = new DateTime();
        dtNow.setFromCurrentSystemTime();
        xml.newChild2("Last-Attempt-Date", dtNow.getAsRfc822(true));

        boolean headerOnly = true;
        StringBuilder sbText = new StringBuilder();
        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");

        String explain = sbText.getAsString();

        Email dsnEmail = new Email();
        try {
            email.toDsn(explain, xml.getXml(), headerOnly, dsnEmail);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        System.out.println(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--
    }
}