Ejemplo n.º 1
0
        private static string EncodeField(string str)                   // 将字段值编码(含非ASCII码时)
        {
            string utf8Str   = MyEncoder.EncodeWithUTF8(str);
            string base64Str = MyEncoder.EncodeWithBase64(utf8Str);

            string encodedFieldStr = String.Format("=?UTF-8?B?{0}?=", base64Str);

            return(encodedFieldStr);
        }
Ejemplo n.º 2
0
        private static string BodyToStr(Body body)                      // 将信体转为字符串
        {
            string bodyStr = "";

            // Content-Type
            if (body.IsMulti)
            {
                bodyStr += String.Format("Content-Type: {0};\r\n\tboundary=\"{1}\"\r\n", GetContentTypeStr(body.ContentType), body.Boundary);
            }
            else if (body.IsAttachment)
            {
                bodyStr += String.Format("Content-Type: {0};\r\n\tname=\"{1}\"\r\n", GetContentTypeStr(body.ContentType), body.Name);
            }
            else
            {
                bodyStr += String.Format("Content-Type: {0};\r\n\tcharset=\"{1}\"\r\n", GetContentTypeStr(body.ContentType), "UTF-8");
            }

            // Content-Transfer-Encoding
            if (!body.IsMulti)
            {
                bodyStr += String.Format("Content-Transfer-Encoding: base64\r\n");
            }

            // Other Attributes
            if (body.IsAttachment)
            {
                bodyStr += String.Format("Content-Disposition: attachment; filename=\"{0}\"\r\n", body.Name);
            }

            /* 构建邮件体 */
            if (body.IsMulti)
            {
                foreach (Body subBody in body.SubBodies)
                {
                    bodyStr += String.Format("\r\n--{0}\r\n", body.Boundary);       // 添加起头
                    bodyStr += BodyToStr(subBody);
                }
                bodyStr += String.Format("\r\n--{0}--\r\n", body.Boundary);         // 添加结尾
            }
            else
            {
                string base64Data = MyEncoder.EncodeWithBase64(body.Data);          // 编码为base64
                string dstStr     = "";
                dstStr += "\r\n";
                for (int i = 0; i < base64Data.Length; i += 75)                     // 保证每行不超过80字符
                {
                    if (i + 75 < base64Data.Length)
                    {
                        dstStr += base64Data.Substring(i, 75) + "\r\n";
                    }
                    else
                    {
                        dstStr += base64Data.Substring(i, base64Data.Length - i) + "\r\n";
                    }
                }
                dstStr  += "\r\n";
                bodyStr += dstStr;
            }

            return(bodyStr);
        }