Delphi 使用Indy组件的最大消息长度

Delphi 使用Indy组件的最大消息长度,delphi,indy,indy-9,Delphi,Indy,Indy 9,我正在尝试使用delphi代码发送消息TIdMessage。该消息由两部分组成:text/plain和text/html。 我有一个html页面作为模板和一些需要插入到模板中的大文本(在标记为#######文本的特殊位置)。合并模板和文本后,我得到新邮件的正文。然后我发送此消息(使用TIdMessage和tidmtp),但结果消息只包含文本的第二部分。文本有40000多个字符。 当我发送没有html tmplate(只有大文本)的消息时,一切都正常 如何设置消息的长度 我试图设置FIdMessa

我正在尝试使用delphi代码发送消息
TIdMessage
。该消息由两部分组成:
text/plain
text/html
。 我有一个html页面作为模板和一些需要插入到模板中的大文本(在标记为#######文本的特殊位置)。合并模板和文本后,我得到新邮件的正文。然后我发送此消息(使用
TIdMessage
tidmtp
),但结果消息只包含文本的第二部分。文本有40000多个字符。 当我发送没有html tmplate(只有大文本)的消息时,一切都正常

如何设置消息的长度

我试图设置
FIdMessage.contentTransferencode:='quoted printable'和fidstp.MsgLineLength:=MAXWORD但这对我没有帮助

提前感谢。
以下是一些代码:

var
  FSMTP: TIdSMTP;
  FIdMessage: TIdMessage;
  idx: integer;
  i: Integer;
  FIdText: TIdText;
begin
  FSMTP := TIdSMTP.Create( nil );
  FIdMessage := TIdMessage.Create( nil );
  try
    try
      FIdMessage.ExtraHeaders.Clear;
      FIdMessage.MessageParts.Clear;

      // Attachments
      for idx := 0 to Attachments.Count - 1 do
        TIdAttachment.Create( FIdMessage.MessageParts,
          TEmailAttachment( Attachments.Items[ idx ] ).FLocalTemplateName );


      FIdMessage.From.Text := FFrom;
      FIdMessage.Recipients.EMailAddresses := FTo;
      FIdMessage.Subject := FSubject;
      if (FHtmlTemplateFilePath <> '') then
      begin
        FIdMessage.ContentType := 'multiparts/related; type="text/html"';
        AddAttachements(FIdMessage);  // procedure that added Attachments

        FIdText := TIdText.Create(FIdMessage.MessageParts, nil);
        FIdText.Body.Text := 'Please view a html version of this email';
        FIdText.ContentType := 'text/plain';


        FIdText := TIdText.Create(FIdMessage.MessageParts, nil);
        FIdText.Body.Text := FBody;
        FIdText.ContentType := 'text/html';

      end
      else
      begin
        FIdMessage.Body.Text := FBody;
      end;    

      FIdMessage.CCList.Clear;
      FIdMessage.ReceiptRecipient.Text := '';

      FSMTP.AuthenticationType := FSMTPAuthenticationType;
      FSMTP.UserID := FSMTPUserID;
      FSMTP.Password := FSMTPPassword;
      FSMTP.Host := FSMTPHost;
      FSMTP.Port := FSMTPPort;
      FSMTP.MsgLineLength := MAXWORD;

      RepeatRetryCount := FSMTPRepeatRetryCount;
      FSMTP.Connect;
       try
            FSMTP.Send( FIdMessage );
       finally
            FSMTP.Disconnect;
       end;
     except
       end;
  finally
    FSMTP.Free;
    FIdMessage.Free;
  end;
end;
procedure AddAttachements(AIdMessage: TidMessage);
var
  LCid: Integer;
  LFileName, LFileExt, LSearchFolder: String;
  LSearchResult: TSearchRec;
  Attachment: TIdAttachment;
begin
  FHtmlCids.Clear;
  LSearchFolder := ExtractFilePath(FHtmlTemplateFilePath)+ChangeFileExt(ExtractFileName(FHtmlTemplateFilePath),'');
  if (FindFirst(LSearchFolder + '_*', faDirectory, LSearchResult)=0) or
     (FindFirst(LSearchFolder + '.*', faDirectory, LSearchResult)=0)
  then
    LSearchFolder := LSearchResult.Name;

  FindClose(LSearchResult);
  if FindFirst(ExtractFilePath(FHtmlTemplateFilePath)+LSearchFolder+'\*.*', faAnyFile - faDirectory, LSearchResult)=0 then
  begin
    repeat
      Attachment := TIdAttachment.Create(AIdMessage.MessageParts, ExtractFilePath(FHtmlTemplateFilePath)+ LSearchFolder + '\' + LSearchResult.Name);
      LCid := Random(MaxInt);
      Attachment.ExtraHeaders.Values['Content-ID'] := IntToStr(LCid);
      LFileName := ExtractFileName(LSearchResult.Name);
      LFileExt := ExtractFileExt(LSearchResult.Name);
      if UpperCase(LFileExt) = '.XML' then
        Attachment.ContentType := 'text/xml'
      else if UpperCase(LFileExt) = '.PNG' then
        Attachment.ContentType := 'image/png'
      else if UpperCase(LFileExt) = '.THMX' then
        Attachment.ContentType := 'application/vnd.ms-officetheme'
      else if UpperCase(LFileExt) = '.JPG' then
        Attachment.ContentType := 'image/jpeg'
      else if UpperCase(LFileExt) = '.GIF' then
        Attachment.ContentType := 'image/gif'
      else if UpperCase(LFileExt) = '.SVG' then
        Attachment.ContentType := 'image/svg+xml'
      else if UpperCase(LFileExt) = '.TIF' then
        Attachment.ContentType := 'image/tiff'
      else if UpperCase(LFileExt) = '.TIFF' then
        Attachment.ContentType := 'image/tiff'
      else if UpperCase(LFileExt) = '.ICO' then
        Attachment.ContentType := 'image/vnd.microsoft.icon'
      else if UpperCase(LFileExt) = '.BMP' then
        Attachment.ContentType := 'image/bmp'
      else if UpperCase(LFileExt) = '.CSS' then
        Attachment.ContentType := 'text/css'
      else if UpperCase(LFileExt) = '.JS' then
        Attachment.ContentType := 'application/javascript'
      else if UpperCase(LFileExt) = '.JPEG' then
        Attachment.ContentType := 'image/jpeg'
      else if UpperCase(LFileExt) = '.WMZ' then
        Attachment.ContentType := 'application/x-ms-wmz'
      else raise Exception.CreateFmt('Unknown file type "%s"', [LFileExt]);
      FHtmlCids.AddObject(LSearchFolder+'/'+LFileName, TObject(LCid));
      FHtmlCids.AddObject(UrlEncode(LSearchFolder+'/'+LFileName), TObject(LCid));
    until FindNext(LSearchResult)<>0;
    FindClose(LSearchResult);
  end;
  FHtmlCids.Sort;
end;
var
FSMTP:tidstp;
FIdMessage:TIdMessage;
idx:整数;
i:整数;
FIdText:TIdText;
开始
FSMTP:=tidstp.Create(nil);
FIdMessage:=TIdMessage.Create(无);
尝试
尝试
FIdMessage.ExtraHeaders.Clear;
FIdMessage.MessageParts.Clear;
//附件
对于idx:=0到附件。计数-1 do
TIdAttachment.Create(FIdMessage.MessageParts,
TEmailAttachment(Attachments.Items[idx]).FLocalTemplateName);
FIdMessage.From.Text:=FFrom;
FIdMessage.Recipients.EMailAddresses:=FTo;
FIdMessage.Subject:=FSubject;
如果(FHtmlTemplateFilePath“”),则
开始
FIdMessage.ContentType:='多部分/相关;type=“text/html”;
添加附件(FIdMessage);//添加附件的过程
FIdText:=TIdText.Create(FIdMessage.MessageParts,nil);
FIdText.Body.Text:=“请查看此电子邮件的html版本”;
FIdText.ContentType:=“文本/普通”;
FIdText:=TIdText.Create(FIdMessage.MessageParts,nil);
FIdText.Body.Text:=FBody;
FIdText.ContentType:='text/html';
结束
其他的
开始
FIdMessage.Body.Text:=FBody;
结束;
FIdMessage.CCList.Clear;
FIdMessage.ReceiptRecipient.Text:='';
FSMTP.AuthenticationType:=FSMTPAuthenticationType;
FSMTP.UserID:=FSMTPUserID;
FSMTP.Password:=FSMTPPassword;
FSMTP.Host:=FSMTPHost;
FSMTP.Port:=FSMTPPort;
FSMTP.MsgLineLength:=MAXWORD;
RepeatRetryCount:=FSMTPrefeatureCount;
连接;
尝试
FSMTP.Send(FIdMessage);
最后
断开连接;
结束;
除了
结束;
最后
免费;
免费;
结束;
结束;
程序添加附件(AIdMessage:TidMessage);
变量
LCid:整数;
LFileName、LFileExt、LSearchFolder:String;
LSearchResult:TSearchRec;
附件:TID附件;
开始
FHtmlCids.Clear;
LSearchFolder:=ExtractFilePath(FHtmlTemplateFilePath)+ChangeFileExt(ExtractFileName(FHtmlTemplateFilePath),“”;
如果(FindFirst(LSearchFolder+'*',faDirectory,LSearchResult)=0)或
(FindFirst(LSearchFolder+'.*',faDirectory,LSearchResult)=0)
然后
LSearchFolder:=LSearchResult.Name;
FindClose(LSearchResult);
如果FindFirst(ExtractFilePath(FHtmlTemplateFilePath)+LSearchFolder+'\*.*',faAnyFile-faDirectory,LSearchResult)=0,则
开始
重复
附件:=TIdAttachment.Create(AIdMessage.MessageParts,ExtractFilePath(FHtmlTemplateFilePath)+LSearchFolder+'\'+LSearchResult.Name);
LCid:=随机(最大值);
附件.ExtraHeaders.Values['Content-ID']:=IntToStr(LCid);
LFileName:=ExtractFileName(LSearchResult.Name);
lfilext:=ExtractFileExt(LSearchResult.Name);
如果大写(lfilext)=“.XML”,则
Attachment.ContentType:=“文本/xml”
否则,如果大写字母(LFileExt)=“.PNG”,则
附件.ContentType:=“图像/png”
否则,如果大写字母(LFileExt)='.THMX',则
附件.ContentType:=“应用程序/vnd.ms officetheme”
否则,如果大写字母(LFileExt)='.JPG',则
附件.ContentType:=“图像/jpeg”
否则,如果大写字母(LFileExt)='.GIF',则
Attachment.ContentType:=“图像/gif”
否则,如果大写字母(LFileExt)='.SVG',则
Attachment.ContentType:=“图像/svg+xml”
否则,如果大写字母(LFileExt)='.TIF',则
附件.ContentType:=“图像/tiff”
否则,如果大写字母(LFileExt)='.TIFF',则
附件.ContentType:=“图像/tiff”
否则,如果大写字母(LFileExt)='.ICO',则
Attachment.ContentType:=“image/vnd.microsoft.icon”
否则,如果大写字母(LFileExt)=“.BMP”,则
Attachment.ContentType:=“图像/bmp”
否则,如果大写字母(LFileExt)='.CSS',则
Attachment.ContentType:=“文本/css”
否则,如果大写字母(LFileExt)='.JS',则
Attachment.ContentType:=“应用程序/javascript”
否则,如果大写字母(LFileExt)=“.JPEG”,则
附件.ContentType:=“图像/jpeg”
否则,如果大写字母(LFileExt)='.WMZ',则
附件.ContentType:=“应用程序/x-ms-wmz”
else引发异常。CreateFmt('未知文件类型“%s”,[lfilext]);
FHtmlCids.AddObject(LSearchFolder+'/'+LFileName,TObject(LCid));
AddObject(UrlEncode(LSearchFolder+'/'+LFileName),TObject(LCid));
直到FindNext(LSearchResult)0;
FindClose(LSearchResult);
结束;
FHtmlCids.Sort;
结束;

TIdMessage
不限制文本长度。还有别的事情。我的猜测是,您根本没有正确填写
TIdMessage
。您没有显示
AddAttachments()
代码,但是在
TIdText
对象之前添加了
TIdAttachment
对象,这是错误的,尤其是对于您正在使用的
ContentType
。我建议您阅读Indy网站上的以下博客文章,了解HTML电子邮件的正确结构
<html>
....
<body>
some large text <br> in one line. This text have more 40,000 characrets.....
</body>
</html>
<html>
....
  <body>
    some large text <br> 
    in one line. This text have more 40,000 characrets.....
  </body>
</html>