Skip to content

System.FormatException on SmtpDateTime.ParseValue after multiple serialization/deserialization #2

@albertospelta

Description

@albertospelta

Step to reproduce:

  • create a MailMessage with an attachment
  • serialize to FileStream using BinaryFormatter
  • deserialize using BinaryFormatter
  • serialize to a new different file
  • deserialize and then you got the exception

Code example:

        public static void Serialize(MailMessage message, string file)
        {
            using (var stream = new FileStream(file, FileMode.Create))
            {
                new BinaryFormatter().Serialize(stream, (SerializableMailMessage)message);
            }
        }

        public static MailMessage Deserialize(string file)
        {
            using (var stream = File.OpenRead(file))
            {
                return (SerializableMailMessage)new BinaryFormatter().Deserialize(stream);
            }
        }

        static void Main(string[] args)
        {
            using (var mail = new MailMessage())
            {
                mail.Attachments.Add(new Attachment(@"c:\temp\attachment.pdf"));
                mail.From = new MailAddress("from@domain.com");
                mail.To.Add("to@domain.com");
                mail.Subject = "subject";
                mail.Body = "body";

                Serialize(mail, @"c:\temp\mail.bin");
            }

            MailMessage tmp = Deserialize(@"c:\temp\mail.bin");
            Serialize(tmp, @"c:\temp\tmp.bin");
            Deserialize(@"c:\temp\tmp.bin"); // <-- System.FormatException
        }

Exception details:

System.FormatException was unhandled
  HResult=-2146233033
  IsTransient=false
  Message=The date is in an invalid format.
  Source=System
  StackTrace:
       at System.Net.Mime.SmtpDateTime.ParseValue(String data, String& timeZone)
       at System.Net.Mime.SmtpDateTime..ctor(String value)
       at System.Net.Mime.ContentDisposition.<.cctor>b__0(Object value)
       at System.Net.TrackingValidationObjectDictionary.PersistValue(String key, String value, Boolean addValue)
       at System.Net.TrackingValidationObjectDictionary.Add(String key, String value)
       at S22.Mail.SerializableAttachment.op_Implicit(SerializableAttachment attachment)
       at S22.Mail.SerializableMailMessage.op_Implicit(SerializableMailMessage message)
       at ConsoleApplication3.Program.Deserialize(String file) in c:\..\Program.cs:line 34
       at ConsoleApplication3.Program.Main(String[] args) in c:\..\Program.cs:line 53
  InnerException: 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions