在Delphi中发送带附件的电子邮件

4

如何在以HTML格式的电子邮件中发送附件?

我已经成功使用 stmp.gmail.com 以HTML格式发送了一封电子邮件,但是我的邮件包含一个附件。该附件被转换为字符串,但我需要保留原始文件格式。

代码:

with FIdSmtp do
begin
  // Configure IdSMTP
end;

FIdMessage.Clear;
FIdMessage.MessageParts.Clear;
FIdMessage.From.Address := 'EmailRemetente';
FIdMessage.From.Name    := 'Apelido';
FIdMessage.Subject      := 'Assunto';
FIdMessage.Body.Text    := 'Mensagem';
FIdMessage.Recipients.EMailAddresses := 'aEmailDestinatario'; //email destino  
FIdMessage.BccList.EMailAddresses := StringReplace(Trim(BCCList.Text),#13#10,',',[rfReplaceAll]);  
FIdMessage.ccList.EMailAddresses := StringReplace(Trim(CCList.Text),#13#10,',',[rfReplaceAll]);
FIdMessage.ContentType := 'text/html';  // set html format

_Anexo := TStringList.Create;
try
  _Anexo.Text := aAnexos;
  for i := 0 to _Anexo.Count - 1 do
    TIdAttachmentFile.Create(FIdMessage.MessageParts,_Anexo.Strings[i]);
finally
  _Anexo.Free
end;    
FIdSmtp.Send(FIdMessage);

有人可以帮忙吗?

1个回答

5

请阅读我的博客,我在Indy的网站上详细讨论了这个问题:

HTML消息

新的HTML消息构建类

有了这个想法,试试这个:

FIdMessage.Clear;
FIdMessage.From.Address := 'EmailRemetente';
FIdMessage.From.Name    := 'Apelido';
FIdMessage.Subject      := 'Assunto';
FIdMessage.Recipients.EMailAddresses := 'aEmailDestinatario';
FIdMessage.BccList.EMailAddresses := StringReplace(Trim(BCCList.Text),sLineBreak,',',[rfReplaceAll]);  
FIdMessage.ccList.EMailAddresses := StringReplace(Trim(CCList.Text),sLineBreak,',',[rfReplaceAll]);
FIdMessage.ContentType := 'multipart/mixed';

with TIdText.Create(FIdMessage.MessageParts, nil) do
begin
  ContentType := 'text/html';
  Body.Text := 'Mensagem';
end;

_Anexo := TStringList.Create;
try
  _Anexo.Text := aAnexos;
  for i := 0 to _Anexo.Count - 1 do
    TIdAttachmentFile.Create(FIdMessage.MessageParts, _Anexo.Strings[i]);
finally
  _Anexo.Free
end;    

或者是这样的:
FIdMessage.Clear;

with TIdMessageBuilderHtml.Create do
try
  Subject := 'Assunto';
  Html.Text := 'Mensagem';

  _Anexo := TStringList.Create;
  try
    _Anexo.Text := aAnexos;
    for i := 0 to _Anexo.Count - 1 do
      Attachments.Add(_Anexo.Strings[i]);
  finally
    _Anexo.Free
  end;
  FillMessage(FIdMessage);
finally
  Free;
end;

FIdMessage.From.Address := 'EmailRemetente';
FIdMessage.From.Name    := 'Apelido';
FIdMessage.Recipients.EMailAddresses := 'aEmailDestinatario'; 
FIdMessage.BccList.EMailAddresses := StringReplace(Trim(BCCList.Text),sLineBreak,',',[rfReplaceAll]);  
FIdMessage.ccList.EMailAddresses := StringReplace(Trim(CCList.Text),sLineBreak,',',[rfReplaceAll]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接