Delphi 实现HTML邮件发送

3 篇文章 0 订阅
文章介绍了如何使用Delphi的TIdSMTP组件通过SSL发送HTML格式的邮件,包括设置SSL选项、创建邮件内容、添加附件以及同步和异步发送邮件的函数。TIdMessageBuilderHtml用于构建HTML邮件正文,而TIdAttachmentFile则用于处理邮件附件。文章还提供了发送邮件的详细参数说明和函数调用示例。
摘要由CSDN通过智能技术生成

在我们的邮箱里,经常收到HTML格式的邮件。每注册一个网站的时候,总会收到一些他们发来的邮件,打开一后发现和一个网页一样,有图片、链接、文字,甚至有的还有声音和视频和交互。那我们想知道我们怎么才可以给朋友发送这样的邮件?特别是我们想知道如何在后台程序里自动发送HTML格式的认证邮件?

--阿里云用户调查邮件

一、Delphi 发送邮件的实现

Delphi 发送邮件,实际上使用的就是 Indy 的 TIdSMTP 控件,该控件可以实现通过SMTP邮件服务器发送邮件,网上有很多介绍使用 TIdSMTP 这个控件的示例,TIdSMTP 发送邮件有两个地方网上的示例介绍的很少完整:

  1. 支持SSL:

对于这个问题,比如腾讯的企业邮箱指定必须要支持SSL,事实上现在很多邮件服务器都需要支持SSL,不提供不支持SSL的邮箱服务。如果不支持SSL,那么服务器的端口号是25,否则就是465。

Delphi的 TIdSMTP 控件如果需要支持SSL,就需要使用到TIdSSLIOHandlerSocketOpenSSL对象,该对象位于 IdSSLOpenSSL.pas 单元中。

同时还需要 libeay32.dll 和 ssleay32.dll 连个动态链接库的支持。否则使用 TIdSMTP 无法实现SSL邮件的发送。

需要引用的Indy单元列表:

//indy 相关单元
  IdSMTP,
  IdSSLOpenSSL,
  IdExplicitTLSClientServerBase,
  IdMessage,
  IdMessageBuilder,
  IdAttachmentFile,
...

需要使用的Indy控件及对象:

//indy SMTP 对象
      FSMTP           : TIdSMTP;
      FOpenSSLHandler : TIdSSLIOHandlerSocketOpenSSL;
      FIdMessage      : TIdMessage;

//2. 创建邮件发送控件
  FSMTP           := TIdSMTP.Create(nil);
  FOpenSSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  FIdMessage      := TIdMessage.Create(nil);

  FOpenSSLHandler.SSLOptions.Method := sslvTLSv1; //sslvSSLv23 ;//sslvSSLv3;
  FSMTP.IOHandler := FOpenSSLHandler;
  FSMTP.Port      := 465;  //加密的端口号  使用SSL发送邮件
  FSMTP.UseTLS    := utUseImplicitTLS;

  1. 发送 HTML 格式邮件

如果需要发送 HTML 邮件,需要使用到 TIdMessageBuilderHtml 对象,该对象位于 IdMessageBuilder.pas 单元中。

var
  builder  : TIdMessageBuilderHtml; //IdMessageBuilder.pas

TIdSMTP 控件时支持纯文本邮件和 HTML 格式邮件的,如果是纯文本邮件,则邮件的Body内容直接输入文本内容即可,如果是 HTML 格式邮件,邮件整个消息都需要使用 TIdMessageBuilderHtml 对象来生成。

//1.4 邮件内容,包括附件
     if FContentType = TContentType.ctPlainText then
        begin
          Body.Text   := FContent;                    //邮件正文Body内容
          ....
        end
     else
        begin                        //HTML 邮件
          builder := TIdMessageBuilderHtml.Create;
          ....
          //写入 HTML 邮件正文Body内容
          builder.Html.Text := FContent ;
          ....
          builder.Free;
        end;
  1. 支持多个附件

通过TIdAttachmentFile对象,可以实现支持多个邮件附件文件。

  1. 发送邮件函数格式

提供两个函数,分别支持同步发送和异步(线程)发布,两个函数的入口参数完全一致,就是函数名不同。

//同步发送邮件

Send_Email_sync(SMTPServer,Account,Password,Subject,Content,.....);

//异步发送邮件

Send_Email(SMTPServer,Account,Password,Subject,Content,.......);

发送邮件函数参数详细说明:

序号

参数名称

参数样例

参数说明

1

SMTPServer

smtp.exmail.qq.com

SMTP邮件服务器地址

2

Account

nnnn@qq.com

发送邮件账号

3

Password

******

发送邮件账号密码

4

Subject

2023年5.1放假通知

邮件的标题

5

Content

......

如果发送纯文本,则这里就是纯文本的邮件正文内容,如果发送HTML格式文件,这里就是HTML格式的邮件正文内容

6

Attachment

c:\ABC\1.txt

附件文件名称,多个附件之间用英文逗号分隔

7

Recipients

910731685@qq.com

收件人邮件地址,多个地址用英文逗号分隔

8

BccLsit

aaa@Gmail.com

抄送人邮件地址,多个地址用英文逗号分隔

9

isHTMLContent

True

逻辑型

  • True 表示发送的是HTML格式邮件

  • False 表示发送纯文本邮件

10

OnSendCompleted

nil

表示邮件发送结束的回调函数,通知邮件已经发送结束,参数SendSuccessfully如果为True,表示邮件已经成功发送(对方是否接收到不能确定),如果为False,表示邮件发送失败,比如账号不存在,密码不正确等等。

发送邮件函数调用:

var
  SMTPServer   : string;      //邮件服务器
  Account      : string;      //邮件账号
  Password     : string;      //账号密码
  Subject      : string;      //邮件主题
  Content      : string;      //邮件内容(PlainText  HTML)
  Attachment   : string;      //邮件附件,多个用英文逗号分隔
  Recipients   : string;      //接收邮件地址列表,多个用英文逗号分隔
  BccLsit      : string;      //抄送邮件地址列表,多个用英文逗号分隔
  ContentType  : TContentType;
begin
    SMTPServer := LabeledEdit_SMTPServer.Text;
    Account    := LabeledEdit_Account.Text;
    Password   := LabeledEdit_Password.Text;
    Subject    := LabeledEdit_EMail_Subject.Text;
    Content    := Memo2.Text;
    Attachment := LabeledEdit_EMail_Attachment.Text;
    Recipients := LabeledEdit_Email_Recipients.Text;
    BccLsit    := LabeledEdit_Email_BccLsit.Text;

    Label_Result.Caption := '';
    //异步发送函数
    Send_Email(SMTPServer,Account,Password,Subject,Content,Attachment,Recipients,BccLsit,True, OnSendCompleted);
    //同步发送邮件
    //Send_Email_sync(SMTPServer,Account,Password,Subject,Content,Attachment,Recipients,BccLsit,True, OnSendCompleted);

end;

二、演示程序

  1. 功能
  1. 支持SSL发送邮件;

  1. 支持32位和64位程序;

  1. 支持纯文本邮件和 HTML 格式邮件;

  1. 支持同步发送邮件和异步(线程)发送邮件

  1. 支持发送结果回调;

  1. 只需要调用一个函数,使用简单;

  1. 界面

发送 HTML 样板如下:

三、程序下载

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值