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