解决CB TIdMessage 发送不了中文的问题
问题: 在发送中文邮件时,在收件人那,中文全部被“?” (问号)取代。
解决方法:
需要base64解码,然后再发送邮件。代码如下:
// base64 解码
TIdEncoderMIME *Encoder = new TIdEncoderMIME(NULL);
Encoder->EncodeString(subject);
TBytes bytes;
AnsiString tSubject = subject.Trim(); // 中转变量tSubject
bytes.Length = tSubject.Length();
memcpy(&bytes[0], tSubject.c_str(), tSubject.Length());
String subjectMid = Encoder->EncodeBytes(bytes); // 中间字段
String subjectStar = "Subject: =?gb2312?B?"; // 头字段
String subjectEnd = "?="; // 尾字段
subjectStar = subjectStar + subjectMid + subjectEnd; // 合并字段
Message->CharSet = "gb2312";
Message->ExtraHeaders->Add(subjectStar); // 载入合并字段,将Subject base64编码
解释:BASE64编码是一种常用的将二进制数据转换为可打印字符的编码。
资料参考:http://ofme.cn/post-49.html
希望对大家有帮助。谢谢