网上搜索uniGUI发送电子邮件,基本上全部都是VCL的情况。其实VCL引用的indy-TIdSMTP发送邮件,将代码复制粘贴到uniGUI中,一样可以发送邮件;但是头疼的是,邮件主题Subject乱码,不管你如果设置CharSet,都无用;
原因是Delphi目前使用的是indy10的版本,而indy10并没有完美的支持Linux下面发送电子邮件;那么如何解决这个邮件主体Subject乱码的问题呢?
1,uniGUI的FMSoft自带有uIndy,那么肯定是可以使用uIndy发送邮件了,将VCL下的发送邮件引用的文件,全部都加上u,例如:
IdComponent, IdTCPConnection,IdText, IdMessage ...全部修改成
uIdComponent, uIdTCPConnection,uIdText, uIdMessage...,发送邮件的代码部分不需要改动;
2,将uniGUI的Indy中uTIdMessage.pas文件进行修改,如下图:
{$ifdef Linux64}
ISOCharSet := 'UTF-8';
HeaderEncoding := 'B';
{$endif}
3,保存之后,重新编译,发送邮件,邮件主题Subject部分就不乱码了;
4,发送邮件主题部分代码:
var
Msg: TIdMessage;
Msg := TIdMessage.Create(nil);
Msg.ContentType := 'multipart/mixed';
Msg.ContentTransferEncoding := 'base64';
Msg.Clear;
Msg.Body.Clear; // 先清空上次发送的内容
Msg.From.address := '发送者';
Msg.Recipients.EMailAddresses := EReceive; // 收件人地址,多个用逗号隔开
Msg.CCList.EMailAddresses := EReceiveOther; // 抄送人地址,多个用逗号隔开
Msg.BccList.EMailAddresses := EReceiveOther; // 密送人地址,多个用逗号隔开
Msg.Subject := ETitle;
Msg.CharSet := 'UTF-8';
--------------------------------------------------
在uIdGlobalProtocols.pas单元中,
根据注释,应该可以将idcs_ISO_8859_1修改成idcs_UTF_8,这样就应该就可以了。但是实际并不行;