0 out of 2 rated this helpful - Rate this topic

ContentDisposition Class

Represents a MIME protocol Content-Disposition header.

Namespace:  System.Net.Mime
Assembly:  System (in System.dll)
public class ContentDisposition

The information in the ContentDisposition class accompanies an e-mail message that contains attachments when the e-mail message is sent to its destination. The information in ContentDisposition can be used by software that displays e-mail to present the e-mail attachments in the manner intended by the sender.

E-mail messages are created using instances of the MailMessage class. Instances of the Attachment class are used to add attachments to e-mail messages. To modify the ContentDisposition for an attachment, get the instance from the Attachment.ContentDisposition property.

Content to be displayed as part of the message body has the disposition type of Inline. Content that is not displayed but is attached in a separate file has the disposition type of Attachment. Use the Inline property to control the disposition type for the attachment associated with an instance of ContentDisposition.

For file attachments, you can use the properties of the ContentDisposition to set the file size, as well as the date the file was created, last read, and last modified. For all attachments, you can set a recommended file name in the event that the attachment is stored on the receiving computer.

The ToString method returns the Content-Disposition header. The Content-Disposition header is described in RFC 2183 available at http://www.ietf.org.

The following code example creates an e-mail message with an attachment to be displayed inline.

		public static void CreateMessageInlineAttachment(string server, string
		textMessage)
		{
			// Create a message and set up the recipients.
			MailMessage message = new MailMessage(
			   "jane@contoso.com",
			   "ben@contoso.com",
			   "An inline text message for you.",
			   "Message: ");

			// Attach the message string to this e-mail message.
			Attachment data = new Attachment(textMessage, MediaTypeNames.Text.Plain);
			// Send textMessage as part of the e-mail body.
			message.Attachments.Add(data);
			ContentDisposition disposition = data.ContentDisposition;
			disposition.Inline = true;
			//Send the message.
			// Include credentials if the server requires them.
			SmtpClient client = new SmtpClient(server);
			client.Credentials = CredentialCache.DefaultNetworkCredentials;

	    try {
        client.Send(message);
      }
      catch (Exception ex) {
        Console.WriteLine("Exception caught in CreateMessageInlineAttachment: {0}", 
                    ex.ToString() );
      }
			data.Dispose();
		}


public:
   static void CreateMessageInlineAttachment(String* server, String* 
   textMessage)
    {
        // Create a message and set up the recipients.
         MailMessage* message = new MailMessage(
            S"jane@contoso.com", 
            S"ben@contoso.com",
            S"An inline text message for you.", 
            S"Message: ");

        // Attach the message string to this e-mail message.
        Attachment* data = new Attachment(textMessage, MediaTypeNames::Text::Plain);
        // Send textMessage as part of the e-mail body.
        message->Attachments->Add(data);
        ContentDisposition* disposition = data->ContentDisposition;
        disposition->Inline = true;
        //Send the message.
        // Include credentials if the server requires them.
        SmtpClient* client = new SmtpClient(server);
        client->Credentials = CredentialCache::DefaultNetworkCredentials;
        client->Send(message);
        data->Dispose();
        client->Dispose();
    }


System.Object
  System.Net.Mime.ContentDisposition
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
2011 and still has bugs!
Microsoft... are you ever going to fix this ContentDisposition thing?  Note:  If I forward a email message with an xlsx attachment to my gmail account and pop the meesage from gmail, this ContentDisposition works!  However, when I POP the email from my exchange server is does NOT work.  Hence, it would apprear that Exchange Server is the problem.  We are running Exchange 2003.

I found a post on MSDN that says this bug was fix in DOT NET 4.0
HTTP Header special character limitations
If you are specifying the ContentDisposition on an HTTP response to a HTTP client, there are several limitations to what characters you can put in the file name, based on the type of client browser.  
You cannot include a semi-colon ( ; ) in the filename, or the filename will be truncated at the semi-colon.  Firefox/Mozilla truncates the filename if there is a space in the name. 

http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

See "5.1. Syntax of the Content-Type Header Field" in RFC 2045 for the list of special characters that must be enclosed in double quotes ( " ) when specified in the filename.

http://www.ietf.org/rfc/rfc2045.txt

This VB.NET code will cause most file names to pass through to the web browser correctly (tested with IE 8).  The filename variable cannot be HTML encoded or URL encoded:

Response.AppendHeader("Content-Disposition", "inline; filename=""" + filename.Replace(";", "%3B").Replace(" ", "%20") + """")
THERE IS A BUG!
this: will not parse
attachment; read-date="18 Sep 2009 12:09:00 +0200"; creation-date="18 Sep 2009 12:07:57 +0200"; modification-date="18 Sep 2009 12:09:00 +0200"
fixed to (will parse):
attachment; read-date="18 Sep 2009 12:09:01 +0200"; creation-date="18 Sep 2009 12:07:57 +0200"; modification-date="18 Sep 2009 12:09:01 +0200"

tb
THERE IS NO PARSING ERROR HERE
FROM RFC 2183:

quoted-date-time := quoted-string
; contents MUST be an RFC 822 `date-time'
; numeric timezones (+HHMM or -HHMM) MUST be used
creation-date and modification-date bug (date parsing not corresponding to RFC)
There is some major parsing error. This class does not respect the RFC 822 (Section 5) for date format.

When trying to create a contentdisposition from a string, it throws a FormatException if you :

- Use a zone info like GMT, UT, EST, etc that is authorized by the RFC (see Section 5.1 : Syntax)
- Set the number of seconds to zero in the time string (The RFC specified that the time can be from 00:00:00 to 23:59:59).

The string parsing of this class is very weak and doesn't respect the RFC (RFC822) .