Пример #1
0
 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));
 }
Пример #2
0
        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);
            }
        }