• 如何序列化MailMessage对象


    class App
        {
            
    public static void Main(string[] msgs)
            {
                Console.Title 
    = "Serialize MailMessage";

                SerializableMailMessage mailToSerialize 
    = new SerializableMailMessage();

                mailToSerialize.From 
    = new MailAddress("xhan@test.com""xhan");
                mailToSerialize.To.Add(
    new MailAddress("xhan@test.com""Test1"));
                mailToSerialize.To.Add(
    new MailAddress("test2@test.com"));
                mailToSerialize.CC.Add(
    new MailAddress("test3@test.com""Test3"));
                mailToSerialize.Bcc.Add(
    new MailAddress("test4@test.com"));
                mailToSerialize.Subject 
    = "Test Email";
                mailToSerialize.Body 
    = "<p>This is a test email for serialization!</p>";
                mailToSerialize.IsBodyHtml 
    = true;
                mailToSerialize.Priority 
    = MailPriority.High;

                mailToSerialize.Attachments.Add(
    new Attachment(@"e:\247677.jpg"));


                
    string xmlMail = SerializableMailMessage.Serialize(mailToSerialize);

                Console.WriteLine(xmlMail);

                SerializableMailMessage mailToDeserialize 
    = SerializableMailMessage.Deserialize(xmlMail);
               

                SmtpClient client 
    = new SmtpClient();
                client.Credentials 
    = new System.Net.NetworkCredential("xhan@test.com""testxxx");
                client.Host 
    = "smtp.test.com";
                client.DeliveryMethod 
    = SmtpDeliveryMethod.Network;
                client.Send(mailToDeserialize);

                Console.ReadKey();
            
            }
        }


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net.Mail;
    using System.Xml;
    using System.Xml.Serialization;
    using System.Xml.Schema;
    using System.IO;

    namespace ProcessingApplication.Message
    {
        
    public class SerializableMailMessage :MailMessage,IXmlSerializable
        {
            
    public MailMessage Email { getset; }

            
    public XmlSchema GetSchema()
            {
                
    return null;
            }

            
    public void WriteXml(XmlWriter writer)
            {
                
    if (this != null)
                {
                    writer.WriteStartElement(
    "MailMessage");
                    writer.WriteAttributeString(
    "Priority", Convert.ToInt16(this.Priority).ToString());
                    writer.WriteAttributeString(
    "IsBodyHtml"this.IsBodyHtml.ToString());
                    
    // From
                    writer.WriteStartElement("From");
                    
    if (!string.IsNullOrEmpty(this.From.DisplayName))
                        writer.WriteAttributeString(
    "DisplayName"this.From.DisplayName);
                    writer.WriteRaw(
    this.From.Address);
                    writer.WriteEndElement();
                    
    // To
                    writer.WriteStartElement("To");
                    writer.WriteStartElement(
    "Addresses");
                    
    foreach (MailAddress address in this.To)
                    {
                        writer.WriteStartElement(
    "Address");
                        
    if (!string.IsNullOrEmpty(address.DisplayName))
                            writer.WriteAttributeString(
    "DisplayName", address.DisplayName);
                        writer.WriteRaw(address.Address);
                        writer.WriteEndElement();

                    }
                    writer.WriteEndElement();
                    writer.WriteEndElement();
                    
    // CC
                    if (this.CC.Count > 0)
                    {
                        writer.WriteStartElement(
    "CC");
                        writer.WriteStartElement(
    "Addresses");
                        
    foreach (MailAddress address in this.CC)
                        {
                            writer.WriteStartElement(
    "Address");
                            
    if (!string.IsNullOrEmpty(address.DisplayName))
                                writer.WriteAttributeString(
    "DisplayName", address.DisplayName);
                            writer.WriteRaw(address.Address);
                            writer.WriteEndElement();
                        }
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                    }
                    
    // Bcc
                    if (this.Bcc.Count > 0)
                    {
                        writer.WriteStartElement(
    "Bcc");
                        writer.WriteStartElement(
    "Addresses");
                        
    foreach (MailAddress address in this.Bcc)
                        {
                            writer.WriteStartElement(
    "Address");
                            
    if (!string.IsNullOrEmpty(address.DisplayName))
                                writer.WriteAttributeString(
    "DisplayName", address.DisplayName);
                            writer.WriteRaw(address.Address);
                            writer.WriteEndElement();
                        }
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                    }
                    
    // Subject
                    writer.WriteStartElement("Subject");
                    writer.WriteRaw(
    this.Subject);
                    writer.WriteEndElement();
                    
    // Body
                    writer.WriteStartElement("Body");
                    writer.WriteCData(Body);
                    writer.WriteEndElement();
                    
    //Attachments
                    if (this.Attachments.Count > 0)
                    {
                        writer.WriteStartElement(
    "Attachments");
                        
    foreach (Attachment attachment in this.Attachments)
                        {
                            writer.WriteStartElement(
    "Attachment");

                            writer.WriteStartElement(
    "Name");
                            writer.WriteString(attachment.Name);
                            writer.WriteEndElement();

                            writer.WriteStartElement(
    "Data");
                            BinaryReader br 
    = new BinaryReader(attachment.ContentStream);
                            
    byte[] bytes = br.ReadBytes((int)attachment.ContentStream.Length);
                            writer.WriteBase64(bytes, 
    0, bytes.Length);
                            writer.WriteEndElement();

                            writer.WriteEndElement();
                        }
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();

                }

            }


            
    public void ReadXml(XmlReader reader)
            {

                XmlDocument xml 
    = new XmlDocument();

                xml.Load(reader);



                
    // Properties

                XmlNode rootNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage");

                
    this.IsBodyHtml = Convert.ToBoolean(rootNode.Attributes["IsBodyHtml"].Value);

                
    this.Priority = (MailPriority)Convert.ToInt16(rootNode.Attributes["Priority"].Value);



                
    // From

                XmlNode fromNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/From");

                
    string fromDisplayName = string.Empty;

                
    if (fromNode.Attributes["DisplayName"!= null)

                    fromDisplayName 
    = fromNode.Attributes["DisplayName"].Value;

                MailAddress fromAddress 
    = new MailAddress(fromNode.InnerText, fromDisplayName);

                
    this.From = fromAddress;



                
    // To

                XmlNode toNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/To/Addresses");

                
    foreach (XmlNode node in toNode.ChildNodes)
                {

                    
    string toDisplayName = string.Empty;

                    
    if (node.Attributes["DisplayName"!= null)

                        toDisplayName 
    = node.Attributes["DisplayName"].Value;

                    MailAddress toAddress 
    = new MailAddress(node.InnerText, toDisplayName);

                    
    this.To.Add(toAddress);

                }



                
    // CC

                XmlNode ccNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/CC/Addresses");

                
    if (ccNode != null)
                {
                    
    foreach (XmlNode node in ccNode.ChildNodes)
                    {

                        
    string ccDisplayName = string.Empty;

                        
    if (node.Attributes["DisplayName"!= null)

                            ccDisplayName 
    = node.Attributes["DisplayName"].Value;

                        MailAddress ccAddress 
    = new MailAddress(node.InnerText, ccDisplayName);

                        
    this.CC.Add(ccAddress);
                    }
                }



                
    // Bcc

                XmlNode bccNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/Bcc/Addresses");

                
    if (bccNode != null)
                {
                    
    foreach (XmlNode node in bccNode.ChildNodes)
                    {

                        
    string bccDisplayName = string.Empty;

                        
    if (node.Attributes["DisplayName"!= null)

                            bccDisplayName 
    = node.Attributes["DisplayName"].Value;

                        MailAddress bccAddress 
    = new MailAddress(node.InnerText, bccDisplayName);

                        
    this.Bcc.Add(bccAddress);

                    }
                }



                
    // Subject

                XmlNode subjectNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/Subject");

                
    this.Subject = subjectNode.InnerText;



                
    // Body

                XmlNode bodyNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/Body");

                
    this.Body = bodyNode.InnerText;


                XmlNode attachmentsNode 
    = GetConfigSection(xml, "SerializableMailMessage/MailMessage/Attachments");
                
    if (attachmentsNode != null)
                {
                    
    foreach (XmlNode node in attachmentsNode.ChildNodes)
                    {
                        
    byte[] bytes = System.Convert.FromBase64String(node.LastChild.InnerText);
                        Stream stream 
    = new MemoryStream(bytes);
                        Attachment attachment 
    = new Attachment(stream, node.FirstChild.InnerText);
                        
    this.Attachments.Add(attachment);
                    }
                }
            }


            
    public XmlNode GetConfigSection(XmlDocument xml, string nodePath)
            {

                
    return xml.SelectSingleNode(nodePath);

            }

            
    public static string Serialize(SerializableMailMessage mailMessage)
            { 
                XmlSerializer serializer 
    = new XmlSerializer(typeof(SerializableMailMessage));

                
    using (StringWriter stringWriter = new StringWriter())
                {
                    serializer.Serialize(stringWriter, mailMessage);

                    
    return stringWriter.ToString();
                }
            }
            
    public static SerializableMailMessage Deserialize(string xmlMail)
            {
                XmlSerializer serializer 
    = new XmlSerializer(typeof(SerializableMailMessage));

                
    using (StringReader stringReader = new StringReader(xmlMail))
                {
                    SerializableMailMessage mailMessage 
    = serializer.Deserialize(stringReader) as SerializableMailMessage;
                    
    return mailMessage;
                }
            }

        }

        
    }


  • 相关阅读:
    初学者易上手的SSH-spring 01控制反转(IOC)
    初学者易上手的SSH-hibernate04 一对一 一对多 多对多
    初学者易上手的SSH-hibernate03 三大状态与缓存
    初学者易上手的SSH-hibernate02 三种查询方式
    初学者易上手的SSH-hibernate01环境搭建
    Maven-环境搭建以及建立Maven项目
    初学者易上手的SSH-struts2 05拦截器与自定义拦截器
    初学者易上手的SSH-struts2 04值栈与ognl表达式
    screen常用操作总结
    word2016教程:使用密码保持修订
  • 原文地址:https://www.cnblogs.com/xhan/p/1645410.html
Copyright © 2020-2023  润新知