如何使用TIdMessage和Delphi XE * UPDATED *发送包含希腊字符的电子邮件*

如何使用TIdMessage和Delphi XE * UPDATED *发送包含希腊字符的电子邮件*,第1张

概述我们希望通过电子邮件发送,使用D-XE和Indy的TIdMessage组件将以下htm文件作为正文: <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1253"><meta name=Generator content="Microsoft Word 12 (filtered)"> 我们希望通过电子邮件发送,使用D-XE和Indy的TIDMessage组件将以下htm文件作为正文:

<@R_419_6832@><head><Meta http-equiv=Content-Type content="text/@R_419_6832@; charset=windows-1253"><Meta name=Generator content="Microsoft Word 12 (filtered)"><style><!-- /* Font DeFinitions */ @Font-face    {Font-family:"Cambria Math";    panose-1:2 4 5 3 5 4 6 3 2 4;}@Font-face    {Font-family:Tahoma;    panose-1:2 11 6 4 3 5 4 4 2 4;} /* Style DeFinitions */ p.Msonormal,li.Msonormal,div.Msonormal    {margin:0cm;    margin-bottom:.0001pt;    Font-size:12.0pt;    Font-family:"Times New Roman","serif";    color:black;}.MsoChpDefault    {Font-size:10.0pt;}@page Section1    {size:595.3pt 841.9pt;    margin:72.0pt 90.0pt 72.0pt 90.0pt;}div.Section1    {page:Section1;}--></style></head><body bgcolor=white lang=EL><div class=Section1><p class=Msonormal><span lang=EN-US style='Font-family:"Tahoma","sans-serif"'>Abcd</span><spanlang=EN-US style='Font-family:"Tahoma","sans-serif"'> </span><spanstyle='Font-family:"Tahoma","sans-serif"'>αβγδ ά&#8118;&#8048;&#7938; </span></p></div></body></@R_419_6832@>

(好吧,实际文件不同但问题是一样的).

在上面的文件中,如果您将其保存为temp.htm并将其加载到Internet Explorer中,您将看到4个拉丁字符,4个没有音调的希腊字符和4个带有音调的希腊字符(Alpha的变体 – 第一个字母希腊字母表).像这样的东西:

Abcdαβγδᾶὰἂᾶὰἂ

到现在为止还挺好.

如果我们在TIDMessage的Body属性中加载上述文件并通过电子邮件发送它,则显示如下:

A B C D ???? ?ᾶὰἂ

如你所见,单调字母表中的希腊字母被替换为???? ? – 在WinXP上使用Mozilla Thunderbird 3进行测试.

TIDMessage组件的属性如下:

我试图将CharSet设置为windows-1253,但没有运气.

任何想法如何工作?

更新:

回答你的问题:

收到后的原始消息来源是:(电子邮件地址被编辑)

From - Thu Sep 15 11:11:06 2011X-Account-Key: account3X-UIDL: 00007715X-Mozilla-Status: 0001X-Mozilla-Status2: 00400000X-Mozilla-Keys:                                                                                 Return-Path: [redacted]X-Envelope-To: [redacted]X-Spam-Status: No,hits=0.0 required=5.0    tests=AWL: 0.194,BAYES_20: -0.73,@R_419_6832@_MESSAGE: 0.001,MIME_header_CTYPE_ONLY: 0.56,MIME_@R_419_6832@_ONLY: 0.001,MISSING_MID: 0.001,CUSTOM_RulE_FROM: ALLOW,TOTAL_score: 0.027,autolearn=noX-Spam-Level: Received: from localhost ([127.0.0.1])    by [redacted]    for [redacted];    Thu,15 Sep 2011 11:10:59 +0300From: [redacted]Subject: Test msgTo: [redacted]Content-Type: text/@R_419_6832@; charset=us-asciiSender: [redacted]Reply-To: [redacted]disposition-Notification-To: [redacted]Return-Receipt-To: [redacted]Date: Thu,15 Sep 2011 11:10:59 +0300<@R_419_6832@><head><Meta http-equiv=Content-Type content="text/@R_419_6832@; charset=windows-1253"><Meta name=Generator content="Microsoft Word 12 (filtered)"><style><!-- /* Font DeFinitions */ @Font-face    {Font-family:"Cambria Math";    panose-1:2 4 5 3 5 4 6 3 2 4;}@Font-face    {Font-family:Tahoma;    panose-1:2 11 6 4 3 5 4 4 2 4;} /* Style DeFinitions */ p.Msonormal,"sans-serif"'>???? ?&#8118;&#8048;&#7938; </span></p></div></body></@R_419_6832@>

Mozilla Thunderbird还说消息编码:Western(ISO-8859-1).我试图在IDMessage组件中添加不同的编码,如windows-1253(希腊语)或UTF-8 – 结果是一样的.此外,我试图将htm文件转换为UTF-8(使用记事本) – 它看起来一样(我在@R_419_6832@的元信息中手动更改了charset).再次发送邮件.结果:Abcd ??? 2?3 ?? ??ᾶὰἂ

解决方法 如果您查看自己的屏幕截图,您将看到TIDMessage和传输的电子邮件都设置为使用US-ASCII作为CharSet.这就是你的数据被改变的原因.

如果将@R_419_6832@加载到TIDMessage.Body或TIDText.Body属性中,则必须将数据解码为UTF-16(因为这是Body属性在XE中使用的),然后设置TIDMessage.CharSet或TIDText.CharSet属性到windows-1253,以便在发送电子邮件时正确地重新编码UTF-16数据,例如:

Enc := CharsetToEnCoding('windows-1253');try  IDMessage.Body.LoadFromfile('file.htm',Enc);  IDMessage.ContentType := 'text/@R_419_6832@';  IDMessage.CharSet := 'windows-1253';finally  Enc.Free;end;

要么:

Enc := CharsetToEnCoding('windows-1253');try  with TIDText.Create(IDMessage.MessageParts,nil) do  begin    Body.LoadFromfile('file.htm',Enc);    ContentType := 'text/@R_419_6832@';    CharSet := 'windows-1253';  end;finally  Enc.Free;end;

如果您将@R_419_6832@加载到TIDAttachment对象中,那么您不必手动解码/编码任何内容,因为附件数据按原样发送.

with TIDAttachmentfile.Create(IDMessage.MessageParts,'file.htm') dobegin  ContentType := 'text/@R_419_6832@';end;
总结

以上是内存溢出为你收集整理的如何使用TIdMessage和Delphi XE * UPDATED *发送包含希腊字符的电子邮件*全部内容,希望文章能够帮你解决如何使用TIdMessage和Delphi XE * UPDATED *发送包含希腊字符的电子邮件*所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存