我正在尝试从 delphi-code use 发送消息TIdMessage
。该消息由两部分组成:text/plain
和text/html
。我有 html-page 作为模板和一些需要插入模板的大文本(在标记为 ##text## 的特殊位置)。合并模板和文本后,我得到了新消息的正文。然后我发送这条消息(使用TIdMessage
和TIdSMTP
),但结果消息仅包含文本的第二部分。文本有超过 40,000 个字符。当我发送没有 html-tmplate(只有大文本)的消息时,一切正常。
如何设置消息长度?
我试图设置FIdMessage.ContentTransferEncoding := 'quoted-printable' and FIdSMTP.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;