小编Pau*_*ulV的帖子

在.NET中序列化MailMessage对象的优雅方法

我目前正在考虑在C#中序列化一个MailMessage对象,虽然网上有一些示例的变体,但它们会序列化为二进制,这种点错过了IMO点.

我的方法是,我想将MailMessage序列化为RFC2822 eml字符串,下面的代码就是我提出的.

    public string SerializeEmail(MailMessageArgs e)
    {
        string rfc822eml = "";
        Guid g = Guid.NewGuid();
        lock (g.ToString())
        {
            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(@"C:\tmpspool");
            di.CreateSubdirectory(g.ToString());
            string spoolDir = @"C:\tmpspool\" + g.ToString();
            SmtpClient Client = new SmtpClient("localhost");
            Client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
            Client.PickupDirectoryLocation = spoolDir;
            Client.Send(e.mailObj);
            var files = from file in Directory.EnumerateFiles(spoolDir)
                       select file;
            string serializedEml = files.First();
            rfc822eml = File.ReadAllText(serializedEml);
            File.Delete(serializedEml);
            Directory.Delete(spoolDir);
        }

        return rfc822eml;
    }
Run Code Online (Sandbox Code Playgroud)

它非常讨厌,但确实有效.理想情况下,我会创建一个新的SMTPClient并添加一个Serialize函数,该函数将自动返回rfc822字符串,而不会访问文件系统.

由于我似乎无法使用Visual Studio跟踪SMTPClient.Send函数,因此这种"理想"的处理方式有点棘手.

我已经通过在Peter Huber的POP3MimeClient和POP3MailClient类中添加一些小的更改来整理RFC消息的反序列化,这样我就可以将HDD上的文件或字符串反序列化为MailMessage.

对我唠叨的是,我真的应该能够使用流序列化MailMessaage并将流写入我选择的字符串 - 或 - 文件而不是绕过房子创建基于GUID的文件夹,如上面的代码所做的那样并将文件内容读回字符串...

关于如何使这更优雅的任何指示将非常感激.

谢谢.

c# serialization rfc822 mailmessage rfc2822

8
推荐指数
1
解决办法
7765
查看次数

标签 统计

c# ×1

mailmessage ×1

rfc2822 ×1

rfc822 ×1

serialization ×1