Click or drag to resize
MimeKit

SmtpDataFilter Constructor

Initializes a new instance of the SmtpDataFilter class.

Namespace: MailKit.Net.Smtp
Assembly: MailKit (in MailKit.dll) Version: 4.3.0
Syntax
C#
public SmtpDataFilter(
	bool decode = false
)

Parameters

decode  Boolean  (Optional)
true if the filter should decode the content; otherwise, false.
Remarks
Creates a new SmtpDataFilter.
Example
C#
public static void SaveToPickupDirectory (MimeMessage message, string pickupDirectory)
{
    do {
        // Generate a random file name to save the message to.
        var path = Path.Combine (pickupDirectory, Guid.NewGuid ().ToString () + ".eml");
        Stream stream;

        try {
            // Attempt to create the new file.
            stream = File.Open (path, FileMode.CreateNew);
        } catch (IOException) {
            // If the file already exists, try again with a new Guid.
            if (File.Exists (path))
                continue;

            // Otherwise, fail immediately since it probably means that there is
            // no graceful way to recover from this error.
            throw;
        }

        try {
            using (stream) {
                // IIS pickup directories expect the message to be "byte-stuffed"
                // which means that lines beginning with "." need to be escaped
                // by adding an extra "." to the beginning of the line.
                // 
                // Use an SmtpDataFilter to "byte-stuff" the message as it is written
                // to the file stream. This is the same process that an SmtpClient
                // would use when sending the message in a `DATA` command.
                using (var filtered = new FilteredStream (stream)) {
                    filtered.Add (new SmtpDataFilter ());

                    // Make sure to write the message in DOS (<CR><LF>) format.
                    var options = FormatOptions.Default.Clone ();
                    options.NewLineFormat = NewLineFormat.Dos;

                    message.WriteTo (options, filtered);
                    filtered.Flush ();
                    return;
                }
            }
        } catch {
            // An exception here probably means that the disk is full.
            // 
            // Delete the file that was created above so that incomplete files are not
            // left behind for IIS to send accidentally.
            File.Delete (path);
            throw;
        }
    } while (true);
}
C#
public static MimeMessage LoadFromPickupDirectory (string fileName)
{
    using (var stream = File.OpenRead (fileName)) {
        // IIS pickup directories store messages that have been "byte-stuffed"
        // which means that lines beginning with "." have been escaped by
        // adding an extra "." to the beginning of the line.
        // 
        // Use an SmtpDataFilter to decode the message as it is loaded from
        // the file stream. This is the reverse process that an SmtpClient
        // would use when sending the message in a `DATA` command.
        using (var filtered = new FilteredStream (stream)) {
            filtered.Add (new SmtpDataFilter (decode: true));

            return MimeMessage.Load (filtered);
        }
    }
}
See Also