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