[Delphi] 用Indy的TIdSMTP发送HTML格式的邮件,并且带附件

來源出處:
https://bbs.csdn.net/topics/80114188

procedure TFormMain.SendMail(Recipient, Address: string);
const
  sStars = ‘BackgroundStars.jpg’;
var
  AdressItem: TIdEMailAddressItem;
  AFile: string;
  AMessage: TIdMessage;
  ASMTP: TIdSMTP;
  AStream: TMemoryStream;
  Attachment: TIdAttachment;
  IdBody: TIdText;
  IdHTML: TIdText;
  idStars: TIdAttachment;
  resStars: TStream;
  TempFile: TStream;
begin
  Screen.Cursor := crHourGlass;
  AFile := FileListBox.FileName;
  if FileExists(AFile) then begin
    AMessage := TIdMessage.Create(nil);
    AMessage.NoDecode := False;
    AMessage.NoEncode := False;
    AMessage.ContentType := ‘multipart/mixed’;
    AMessage.Encoding := meMIME;
    AMessage.MsgId := ‘PrettyPic’;
    AMessage.References := ChangeFileExt(ExtractFileName(AFile), “);
    // Set recipients.
    AdressItem := AMessage.Recipients.Add;
    AdressItem.Name := Recipient;
    AdressItem.Address := Address;
    // Set subject.
    AMessage.Subject := ‘Hello.’;
    // Set sender.
    AMessage.Sender.Name := ‘Workshop Alex’;
    AMessage.Sender.Address := ‘someone@somewhere.org’;
    // Set from.
    AMessage.From.Name := AMessage.Sender.Name;
    AMessage.From.Address := AMessage.Sender.Address;
    // Create plain body.
    IdBody := TIdText.Create(AMessage.MessageParts);
    IdBody.ContentType := ‘text/plain’;
    IdBody.Body.Add(‘Hello, friends.’);
    IdBody.Body.Add(“);
    // Add more to the plain-text bodypart.
    // Create HTML body.
    IdHTML := TIdText.Create(AMessage.MessageParts);
    IdHTML.ContentType := ‘text/html; charset=US-ASCII’;
    IdHTML.ContentTransfer := ‘7bit’;
    IdHTML.Body.Add(‘<html>’);
    IdHTML.Body.Add(‘  <head>’);
    IdHTML.Body.Add(‘    <title>Hello</title>’);
    IdHTML.Body.Add(‘  </head>’);
    IdHTML.Body.Add(‘  <body title="‘ + AMessage.References + ‘" background="cid:BackgroundStars">’);
    IdHTML.Body.Add(‘    Hello, friends.<br>’);
    IdHTML.Body.Add(‘    <br>’);
    IdHTML.Body.Add(‘    <img src="cid:PrettyPic" alt="‘ + ExtractFileName(AFile) + ‘" name="‘ + ExtractFileName(AFile) + ‘" title="Just an image included.">’);
    IdHTML.Body.Add(‘  </body>’);
    IdHTML.Body.Add(‘</html>’);
    // Add the attachment. Don’t forget the extra headers!
    Attachment := TIdAttachment.Create(AMessage.MessageParts, AFile);
    Attachment.ExtraHeaders.Values[‘Content-ID’] := ‘<PrettyPic>’;
    Attachment.ContentType := ‘image/jpeg’;
    idStars := TIdAttachment.Create(AMessage.MessageParts, ExtractFilePath(ParamStr(0)) + sStars);
    idStars.ExtraHeaders.Values[‘Content-ID’] := ‘<BackgroundStars>’;
    idStars.ContentType := ‘image/jpeg’;
    // Now send the thing…
    ASMTP := TIdSMTP.Create(nil);
    ASMTP.Host := ‘mail.whatever.org’;
    ASMTP.Port := 25;
    ASMTP.AuthenticationType := atNone;
    ASMTP.Connect;
    try
      ASMTP.Send(AMessage);
    except
      on E: Exception do ShowMessageFmt(‘Error: %s’, [E.Message]);
    end;
    ASMTP.Disconnect;
    AMessage.Free;
    ASMTP.Free;
  end;
  Screen.Cursor := crDefault;
end;

發表留言