gpt4 book ai didi

delphi - 无法使用delphi indy发送UTF-8电子邮件

转载 作者:行者123 更新时间:2023-12-03 14:42:47 25 4
gpt4 key购买 nike

这是我的代码

电子邮件正文包含一些 unicode 字符

  LSMTP := TIdSMTP.Create(nil);
try
LMsg := TIdMessage.Create(LSMTP);
try
with LMsg do
begin
Subject := Subj;
Recipients.EMailAddresses := Email;
WriteToLog(cInformation,'To: '+Recipients.EMailAddresses);
From.Address := ReplaceVariables(From_Address);
From.Name := ReplaceVariables(From_Name);
Body.Text := EmailMessage;
ContentTransferEncoding := '8bit';
CharSet := 'UTF-8';
ContentType := 'text/plain';
end;

这就是我得到的

Content-Type: text/plain; charset=us-ascii <<<<< WRONG
Content-Transfer-Encoding: 8bit
Date: Fri, 23 Mar 2012 17:53:19 +0000

使用delphi 2009

最佳答案

这是设计使然。设置 ContentType 属性时,如果输入未显式指定字符集,则属性 setter 可能会使用默认值更新 CharSet 属性。某些内容类型,特别是在 text/ 领域中,具有各种 RFC 中规定的特定字符集默认值。印地尽力遵守这些规则。因此,您需要在设置 ContentType 属性之后将 CharSet 属性设置为您想要的值,正如您已经发现的: p>

//LMsg.CharSet := 'UTF-8';
LMsg.ContentType := 'text/plain';
LMsg.CharSet := 'UTF-8';

您也可以这样做:

LMsg.ContentType := 'text/plain; charset=UTF-8';

更新:自 2019 年 7 月 23 日起,ContentType 属性 setter 现在会保留相应的 CharSet 属性值(如果已设置且为字符集)未在新的 ContentType 值中指定。因此,成对的 ContentType+CharSet 属性的设置顺序不再是问题。

关于delphi - 无法使用delphi indy发送UTF-8电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com