解决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

希望对大家有帮助。谢谢

原文地址:https://www.cnblogs.com/ss815367696/p/2651519.html