有没有办法序列化 .Net MailMessage 对象

Posted

技术标签:

【中文标题】有没有办法序列化 .Net MailMessage 对象【英文标题】:Is there a way to serialize a .Net MailMessage object 【发布时间】:2011-02-10 16:28:27 【问题描述】:

我正在尝试编写一个 proc,它将 MailMessage 对象作为参数,并将其拆分以将主题、正文、地址、地址和附件(困难部分)存储在数据库中,所以电子邮件可以在将来的某个时间发送。

我对此的第一个想法是取出我需要的部分并将它们存储在数据库中,除了附件之外,这非常有用。我不知道如何遍历集合然后实际对它们做任何事情。

是否有一种简单的方法来序列化一个 MailMessage 对象,该对象实际上会带上附件的内容?

我做错了吗?以前有人做过吗?

【问题讨论】:

参考[我的回答][1],使用 C# 代码。 [1]:***.com/questions/1264672/… 【参考方案1】:

确实没有一个好的方法可以做到这一点。因此,我继续使用循环 MailMessage 对象并获取我关心的所有信息的原始方法。对于附件,这是最难的部分,每个附件都有一个 ContentStream,我只需读取该流并将其写入磁盘,存储文件名,然后我可以在实际发送时重新创建它。

我还没有完全测试过这种方法,所以我还没有向其他人推荐它,但它似乎是我们特定情况下的最佳解决方案。

【讨论】:

【参考方案2】:

如果我不得不猜测我将使用的策略是将每个附件转换为字节数组,然后将这些字节数组和消息详细信息放入 xml 文档,然后将该 xml 文档作为参数传递给数据库.

【讨论】:

感谢您的建议。不错的主意,但我更多的是寻找一种从实际附件集合中获取文件的方法,这样我们就不必更改任何现有的代码库。好吧,我现在唯一可以接受的更改是替换“smtp.Send(msg);”用“MyClass.Send(msg);” MyClass.Send 方法实际上会将此信息存储在数据库中,而不是实际发送它。然后一个服务器进程会每 10 分钟唤醒一次并实际发送电子邮件。

以上是关于有没有办法序列化 .Net MailMessage 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何序列化邮件消息?

.Net 自带System.Net.Mail.MailMessage发送邮件乱码问题

将 System.Net.mail.MailMessage 保存为 .msg 文件

MailMessage 将字符串作为正文发送,在 Outlook 中没有换行符

为啥我需要 Dispose 一个 System.Net.Mail.MailMessage 实例?

将 System.Net.Mail.MailMessage 替换为手动创建的消息并发送