Delphi 使用Indy和ContentType=';多部分/混合';

Delphi 使用Indy和ContentType=';多部分/混合';,delphi,smtp,indy,Delphi,Smtp,Indy,我使用下面的代码从使用Indy的Delphi应用程序发送电子邮件 我刚刚离开了日常生活的核心部分: MailMessage.From.Name:= UserName; MailMessage.Encoding := meDefault; MailMessage.Subject := MessageObject; with TIdText.Create(MailMessage.MessageParts, nil) do begin ContentType := 'multipart/alter

我使用下面的代码从使用Indy的Delphi应用程序发送电子邮件

我刚刚离开了日常生活的核心部分:

MailMessage.From.Name:= UserName;
MailMessage.Encoding := meDefault;
MailMessage.Subject := MessageObject;
with TIdText.Create(MailMessage.MessageParts, nil) do begin
  ContentType := 'multipart/alternative';
end;
with TIdText.Create(MailMessage.MessageParts, nil) do
begin
  Body.Text:= MessageText; // MessageText could be eithr HTML or TEXT
  ContentType := 'text/html';
end;
// recipients lists are populated
PrepareToList;
PrepareccList;
PrepareBccList;
// attachments are added to the MailMessage
AddAttachments;
MailMessage.ContentType :=  'multipart/mixed';
//usage of TIdSMTP to send mail
SMTP.Connect;
SMTP.Send(MailMessage);
上面的代码以某种方式工作 对于大多数SMTP服务器,在Outlook中接收的邮件如下所示:

…但当我使用特定的“有问题”SMTP服务器时,我会看到:

第一种情况可以,第二种情况是奇数

奇怪的是,当使用一个特定的SMTP服务器时,我重现了这个问题,与所有其他的问题一样,它是好的


您能给我一个soem提示,让我进一步了解情况吗?

您的屏幕截图没有帮助。更有用的是,如果你显示电子邮件的原始数据。你有没有读过我在Indy博客上关于如何正确创建HTML电子邮件的文章?和。我注意到的一点是,您没有将第二个
TIdText
对象的
ParentPart
设置为引用第一个
TIdText
。您正在创建一个
multipart/alternative
部分,但没有提供可选文本。@RemyLebeau感谢您的回复。我一定会读你的文章。请建议在将原始数据发送到smtp服务器之前如何读取原始数据?谢谢
TIdMessage
SaveTo…()
方法。大多数电子邮件阅读器都有查看电子邮件原始数据的方法。比较你发送的和你收到的。您的症状听起来像是“有问题”的服务器正在对您的电子邮件重新编码,例如添加额外的内容、签名等,但这样做不正确,导致损坏,破坏了读者正确解析部分的能力。@RemyLebeau非常感谢。通过阅读您的文章,我注意到我的代码来自(我以前的同事应该在没有太多研发的情况下进行复制和粘贴),但缺少
ParentPart:=0
。我将添加它,并尝试这是否解决了问题。我比较了邮件头和原始数据,唯一显著的区别是有问题的邮件是纯文本邮件。在创建纯文本邮件时,是否指定“text/html”作为内容类型?然后应该是“文本/普通”。