Delphi - 有没有办法编辑SMTP电子邮件的格式和布局?

时间:2013-12-30 14:57:52

标签: html delphi email smtp

我正在创建一个数据库系统,通过托管网站上的网络邮件发送电子邮件' one.com'。

在本网站和其他人的帮助下,我设法将这个电子邮件程序放在一起。但是,我不知道如何格式化此电子邮件中的文本,以便可以自定义字体,字体大小和颜色等。

有没有办法用当前代码执行此操作?如果没有,是否有办法将HTML编辑添加到电子邮件正文。我已经尝试将html标记添加到消息文本中,但它们不会被识别为html标记。这是由于电子邮件通过delphi发送的方式,还是one.com的工作方式?

procedure SendExpiringEmail(MemName: string; ExpDate: string; MemEmail: string);
    var
      IdSMTP: TIdSMTP;
      IdMessage: TIdMessage;
      IdEmailAddressItem: TIdEmailAddressItem;
      SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
      EETextFile: TextFile;
      fileline: string;    
    begin
          IdSMTP := TIdSMTP.Create(nil);
          try
            IdSMTP.Host := 'send.one.com';
            IdSMTP.Port := 465;
            SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
            idsmtp.IOHandler :=  SSLHandler;
            IdSMTP.UseTLS := utUseImplicitTLS;
            IdSMTP.AuthType := satDefault;
            IdSMTP.Username := 'USERNAME';
            IdSMTP.Password := 'PASSWORD';
            IdSMTP.Connect;
            AssignFile(EETextFile, 'C:\MHExpEmailBody.txt');
            Reset(EETextFile);
            if IdSMTP.Authenticate then
            begin
              IdMessage := TIdMessage.Create(nil);
              try
                IdMessage.From.Name := 'NAME';
                IdMessage.From.Address := 'ADDRESS';
                IdMessage.Subject := 'It looks like your membership is about to expire!';
                IdMessage.Body.Add(+MemName);
                IdMessage.Body.Add('');
                while not EOF(EETextFile) do
                  begin
                    ReadLn(EETextFile, fileline);
                    IdMessage.Body.Add(fileline)
                  end;
                IdMessage.Body.Add('');
                IdMessage.Body.Add('We look forward to seeing you. Take Care!');
                IdEmailAddressItem := IdMessage.Recipients.Add;
                IdEmailAddressItem.Address := MemEmail;
                IdSMTP.Send(IdMessage);
              finally
                IdMessage.Free;
              end;
            end;
            IdSMTP.Disconnect;
            Close(EETextFile);
          finally
            IdSMTP.Free;
          end;
        end;

任何对事情如何运作的理解都会受到高度赞赏,因为我还在学习。谢谢。
我只需要能够编辑消息的格式,如果可能的话可能会添加图片。

编辑:我想补充一点,如果没有提供第三方开源组件,我会更喜欢它,因为我发现它们很难实现。

2 个答案:

答案 0 :(得分:0)

将IdMessage.ContentType设置为“text / html”。然后使用HTML标记格式化邮件正文。请务必通过各种电子邮件客户端测试您的电子邮件。以HTML格式收到的电子邮件在不同客户中具有细微差您通常依赖过时和弃用的方式来设置电子邮件内容的样式。

对“创建HTML电子邮件”进行网络搜索,以帮助您开始如何格式化HTML,以便邮件客户端能够正确地准备好它。

或从这里开始http://sixrevisions.com/web_design/creating-html-emails/

答案 1 :(得分:0)

万一有人偶然发现这个问题,之前提出的其中一个链接确实有帮助。 经过一段时间的努力,我得到了一个结论,但我没有足够的重复点来发表答案。无论如何,感谢大家的帮助。

将IdText添加到您的uses子句中。

然后使用此代码段:

with TIdText.Create(IdMessage1.MessageParts, nil) do begin
  Body.Text := 'HTML goes here';
  //Or use Body.Add('HTML goes here');
  ContentType := 'text/html';
end;

IdMessage1.ContentType := 'multipart/alternative';

将自动识别HTML标记。