public override void EncodeMessage(MailMessage source, Stream destination)
{
StreamWriter lWrter = new StreamWriter(destination);
if (DefaultEncoder.NeedEncoding(source))
{
lWrter.WriteLine("MIME-Version: 1.0");
}
for (Int32 i = 0; i < source.Fields.Count; i++)
{
String lKey = source.Fields.Keys[i];
HeaderField lValue = source.Fields[lKey];
if (lKey.Equals("Subject"))
{
lValue.Value = DefaultEncoder.EncodeUtf8Base64(lValue.Value);
lWrter.WriteLine(lKey + ": " + lValue.ToString());
continue;
}
lWrter.WriteLine(SplitMultiLine(lKey + ": " + lValue.ToString(), 80));
}
String lFromEncoded = DefaultEncoder.EncodeUtf8Base64(source.From.Name);
String lFrom = String.Format("From: {0} <{1}>", lFromEncoded, source.From.Address);
lWrter.WriteLine(lFrom);
if (source.Sender.IsSet())
{
lWrter.WriteLine(SplitMultiLine("Sender: " + source.Sender.ToString(), 80));
}
if (source.To.Count > 0)
{
lWrter.WriteLine(SplitMultiLine("To: " + source.To.ToString(), 80));
}
if (source.Cc.Count > 0)
{
lWrter.WriteLine(SplitMultiLine("Cc: " + source.Cc.ToString(), 80));
}
if (-1 != DefaultEncoder.ContainsUnicodeSymbols(source.Contents))
{
lWrter.WriteLine("Content-Type: text/plain; charset=UTF-8; format=flowed");
lWrter.WriteLine("Content-Transfer-Encoding: 8bit");
}
lWrter.WriteLine();
lWrter.Write(source.Contents);
if (!source.Contents.EndsWith("\r\n")) // always add an enter
{
lWrter.WriteLine();
}
lWrter.Flush();
}