public static String EncodeToMailBody(String text, TransferEncoding encodeType, Encoding encoding) { Byte[] bb = encoding.GetBytes(text); if (encodeType == TransferEncoding.Base64) { return(Convert.ToBase64String(bb)); } else if (encodeType == TransferEncoding.QuotedPrintable) { return(MailParser.ToQuotedPrintable(encoding.GetString(bb))); } return(encoding.GetString(bb)); }
public static String EncodeToMailHeaderLine(String text, TransferEncoding encodeType, Encoding encoding, Int32 maxCharCount) { Byte[] bb = null; StringBuilder sb = new StringBuilder(); Int32 StartIndex = 0; Int32 CharCountPerRow = 0; Int32 ByteCount = 0; if (maxCharCount > MailParser.MaxCharCountPerRow) { throw new ArgumentException("maxCharCount must less than MailParser.MaxCharCountPerRow."); } if (String.IsNullOrEmpty(text) == true) { return(""); } if (MailParser.AsciiCharOnly(text) == true) { StartIndex = 0; CharCountPerRow = maxCharCount; for (int i = 0; i < text.Length; i++) { sb.Append(text[i]); if (StartIndex == CharCountPerRow) { sb.Append(MailParser.NewLine); StartIndex = 0; CharCountPerRow = MailParser.MaxCharCountPerRow; if (i < text.Length - 1) { sb.Append("\t"); } } else { StartIndex += 1; } } return(sb.ToString()); } if (encodeType == TransferEncoding.Base64) { CharCountPerRow = (Int32)Math.Floor((maxCharCount - (encoding.WebName.Length + 10)) * 0.75); for (int i = 0; i < text.Length; i++) { ByteCount = encoding.GetByteCount(text.Substring(StartIndex, (i + 1) - StartIndex)); if (ByteCount > CharCountPerRow) { bb = encoding.GetBytes(text.Substring(StartIndex, i - StartIndex)); sb.AppendFormat("=?{0}?B?{1}?={2}\t", encoding.WebName, Convert.ToBase64String(bb), MailParser.NewLine); StartIndex = i; CharCountPerRow = (Int32)Math.Floor((MailParser.MaxCharCountPerRow - (encoding.WebName.Length + 10)) * 0.75); } } bb = encoding.GetBytes(text.Substring(StartIndex)); sb.AppendFormat("=?{0}?B?{1}?=", encoding.WebName, Convert.ToBase64String(bb)); return(sb.ToString()); } else if (encodeType == TransferEncoding.QuotedPrintable) { CharCountPerRow = (Int32)Math.Floor((maxCharCount - (Double)(encoding.WebName.Length + 10)) / 3); for (int i = 0; i < text.Length; i++) { ByteCount = encoding.GetByteCount(text.Substring(StartIndex, (i + 1) - StartIndex)); if (ByteCount > CharCountPerRow) { bb = encoding.GetBytes(text.Substring(StartIndex, i - StartIndex)); sb.AppendFormat("=?{0}?Q?{1}?={2}\t", encoding.WebName, MailParser.ToQuotedPrintableOnHeader(Encoding.ASCII.GetString(bb)), MailParser.NewLine); StartIndex = i; CharCountPerRow = (Int32)Math.Floor((MailParser.MaxCharCountPerRow - (encoding.WebName.Length + 10)) * 0.75); } } bb = encoding.GetBytes(text.Substring(StartIndex)); sb.AppendFormat("=?{0}?Q?{1}?=", encoding.WebName, MailParser.ToQuotedPrintable(Encoding.ASCII.GetString(bb))); return(sb.ToString()); } else { return(text); } }