c++ builder IdSMTP发送邮件,中文标题乱码.请问有高手会解决吗?

时间:2022-02-12 18:11:41
c++ builder IdSMTP发送邮件,中文标题乱码.请问有高手会解决吗?下面是测试的代码,发送邮件正常且邮件内容为中文的也是正常,就是标题为中文时乱码,每个汉字显示为一个"?"号。或者各位有好的其它发邮件方式也可以告之一下,谢谢,请各位高手不吝赐教。


IdMessage1->ContentType = "text/html; charset='utf-8'";
IdMessage1->CharSet = "utf-8";
IdMessage1->ContentTransferEncoding = "base64";
IdMessage1->AttachmentEncoding = "MIME"; // 识别默认编码机制用于邮件部分
IdMessage1->Encoding = meDefault;

IdMessage1->Recipients->EMailAddresses = "258822@qq.com"; // 邮件接收者的信箱
IdMessage1->From->Text = "tcv@163.com"; // 邮件发送者的信箱
IdMessage1->Subject = "中国"; //汉字乱码,字母和数字正常
IdMessage1->Body->Add("利用C++Builder中的IdSMTP和IdMessage控件发送电子邮件"); // 邮件内容
IdMessage1->CCList->EMailAddresses = "258822@qq.com"; // 邮件的抄送地址
IdMessage1->Priority = mpNormal;

if (IdSMTP1->Connected()) {
IdSMTP1->Disconnect();
}
IdSMTP1->Host = "smtp.163.com"; // SMTP服务器
IdSMTP1->Username = "tcv@163.com"; // 163邮箱的用户名
IdSMTP1->Password = "12346"; // 163邮箱的密码
IdSMTP1->Port = 25; // 端口
IdSMTP1->Connect(); // 连接SMTP服务器
if (IdSMTP1->Authenticate()) // 用户验证
{
Memo1->Lines->Add("登录服务器验证成功!");
IdSMTP1->Send(IdMessage1); // 发送邮件
Memo1->Lines->Add("邮件发送成功");
}
IdSMTP1->Disconnect(); // 中断连接SMTP服务器

11 个解决方案

#1


cb2010?

#2


貌似是indy控件的bug
主要原因还是indy10的BUG
CopyTIdString只是简单的1对1复制 也就是说中文的话只复制了两个字节中的第一个字节
// do just a byte to byte copy with no translation. VCL uses ANSI or MBCS.
// With MBCS we still map 1:1

#3


是的 c++ builder xe2,试了很久都不行,除了bcb自带的控件,还有其它推荐的吗?因为如果中文标准不支持的话,就没有任何用了。

#5


xe2 版本 应该就是最新的吧

#6


xe2,是应该是最新的了,我没用过。

看看这个方法,
内容是好的,主题乱码
http://blog.****.net/liukeforever/article/details/4932491

#7


是的 我现在就是这个问题,内容中英字符串都正常, 就是标题的中文全是"?"号。 跟它一样

#8


有类似这样的处理语句吗,如果加了俺也没辙了

capt := EncodeString('郵件主題');
ss := format('=?BIG5?B?%s?=', [capt]);

#9


这个只能试试,您那个代码是delphi的,bcb不知有类似的没

#10


这个问题好像是BUG。建议楼主改用其他方法。

#11


妖哥 有其它好的推荐吗?能发正常发邮件就可以

#1


cb2010?

#2


貌似是indy控件的bug
主要原因还是indy10的BUG
CopyTIdString只是简单的1对1复制 也就是说中文的话只复制了两个字节中的第一个字节
// do just a byte to byte copy with no translation. VCL uses ANSI or MBCS.
// With MBCS we still map 1:1

#3


是的 c++ builder xe2,试了很久都不行,除了bcb自带的控件,还有其它推荐的吗?因为如果中文标准不支持的话,就没有任何用了。

#4


#5


xe2 版本 应该就是最新的吧

#6


xe2,是应该是最新的了,我没用过。

看看这个方法,
内容是好的,主题乱码
http://blog.****.net/liukeforever/article/details/4932491

#7


是的 我现在就是这个问题,内容中英字符串都正常, 就是标题的中文全是"?"号。 跟它一样

#8


有类似这样的处理语句吗,如果加了俺也没辙了

capt := EncodeString('郵件主題');
ss := format('=?BIG5?B?%s?=', [capt]);

#9


这个只能试试,您那个代码是delphi的,bcb不知有类似的没

#10


这个问题好像是BUG。建议楼主改用其他方法。

#11


妖哥 有其它好的推荐吗?能发正常发邮件就可以