MailBee.NET Objects 7.2

Result.DsnStructure Property

DsnAttachment object representing RFC 1894 DSN attachment to this DSN message.

public DsnAttachment DsnStructure {get;}

Property Value

A reference to the DsnAttachment object containing the DSN attachment for the given DSN message, or a null reference (Nothing in Visual Basic) if the DSN attachment is missing in the DSN message.

Remarks

Most frequently used property of DsnAttachment object is OriginalEnvelopeID which allows you to get the tracking ID of the original e-mail message. You can assign tracking ID to outgoing messages using Smtp.DeliveryNotification.TrackingID property. Then, when a bounce message arrives, you can easily match it to the original message you sent earlier using tracking ID provided that you create unique tracking ID for every message sent.

Example

This sample displays the DSN attachment and the original message part of the message.

It's assumed the e-mail samples are .EML files located in C:\Temp\IncomingMail folder. The template database is stored in C:\Temp\BounceDatabase\all.xml file.

[C#]
// To use the code below, import these namespaces at the top of your code.
using System;
using System.IO;
using MailBee.Mime;
using MailBee.BounceMail;

class Sample
{
    static void Main(string[] args)
    {
        // Load the templates database from file(s).
        DeliveryStatusParser parser = new DeliveryStatusParser (@"C:\Temp\BounceDatabase\all.xml", true);
        string[] files = Directory.GetFiles(@"C:\Temp\IncomingMail", "*.eml");
        MailMessage msg = new MailMessage();

        // Iterate through all messages in the folder.
        foreach (string file in files)
        {
            msg.LoadMessage(file);
            Result result = parser.Process(msg);

            Console.WriteLine("\r\nProcessing of message with filename: " + file);

            if (result == null || (result.OriginalMessage == null && result.DsnStructure == null))
            {
                Console.WriteLine("------------------------------------------------------");
                Console.WriteLine("This message doesn't have DSN & original message part.");
                Console.WriteLine("------------------------------------------------------");
            }
            else
            {
                // Get original e-mail message part.
                if (result.OriginalMessage != null)
                {
                    Console.WriteLine("----------------- Original message part --------------");
                    Console.WriteLine(result.OriginalMessage.RawHeader);
                    Console.WriteLine(result.OriginalMessage.BodyPlainText);
                    Console.WriteLine("------------------------------------------------------");
                }

                // Get DSN attachment part.
                if (result.DsnStructure != null)
                {
                    Console.WriteLine("---------------------- DSN part ----------------------");
                    Console.WriteLine(result.DsnStructure.ToString());
                    Console.WriteLine("------------------------------------------------------");
                }
            }
        }
    }
}
[Visual Basic]
' To use the code below, import these namespaces at the top of your code.
Imports System.IO
Imports Microsoft.VisualBasic
Imports MailBee.Mime
Imports MailBee.BounceMail

Class Sample
    Shared Sub Main(ByVal args() As String)
        ' Load the templates database from file(s).
        Dim parser As DeliveryStatusParser = New DeliveryStatusParser("C:\Temp\BounceDatabase\all.xml", True)
        Dim files() As String = Directory.GetFiles("C:\Temp\IncomingMail", "*.eml")
        Dim msg As MailMessage = New MailMessage

        ' Iterate through all messages in the folder.
        For Each file As String In files
            msg.LoadMessage(file)
            Dim result As Result = parser.Process(msg)

            Console.WriteLine(ControlChars.CrLf & "Processing of message with filename: " & file)

            If result Is Nothing Or (result.OriginalMessage Is Nothing And result.DsnStructure Is Nothing) Then
                Console.WriteLine("------------------------------------------------------")
                Console.WriteLine("This message doesn't have DSN & original message part.")
                Console.WriteLine("------------------------------------------------------")
            Else
                ' Get original e-mail message part.
                If Not result.OriginalMessage Is Nothing Then
                    Console.WriteLine("----------------- Original message part --------------")
                    Console.WriteLine(result.OriginalMessage.RawHeader)
                    Console.WriteLine(result.OriginalMessage.BodyPlainText)
                    Console.WriteLine("------------------------------------------------------")
                End If

                ' Get DSN attachment part.
                If Not result.DsnStructure Is Nothing Then
                    Console.WriteLine("---------------------- DSN part ----------------------")
                    Console.WriteLine(result.DsnStructure.ToString())
                    Console.WriteLine("------------------------------------------------------")
                End If
            End If
        Next
    End Sub
End Class

See Also

Result Class | MailBee.BounceMail Namespace