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();
}
}
{
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 { get; set; }
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;
}
}
}
}
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 { get; set; }
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;
}
}
}
}