Delphi2009的Indy全接触之SMTP篇

本文介绍使用TIdSMTP及TIdMessage控件实现邮件发送功能的方法。通过示例代码展示了如何配置邮件内容、SMTP服务器以及发送过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用TIdSMTP及TIdMessage控件实现邮件发送功能。
如下图所示新建工程:

后台代码如下:
  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
  6.   IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
  7.   IdSMTP;
  8. type
  9.   TForm1 = class(TForm)
  10.     Label1: TLabel;
  11.     Edit1: TEdit;
  12.     Label2: TLabel;
  13.     Edit2: TEdit;
  14.     Label3: TLabel;
  15.     Edit3: TEdit;
  16.     Label4: TLabel;
  17.     Edit4: TEdit;
  18.     ListBox1: TListBox;
  19.     Button1: TButton;
  20.     IdSMTP1: TIdSMTP;
  21.     IdMessage1: TIdMessage;
  22.     memoMsg: TMemo;
  23.     Label5: TLabel;
  24.     Edit5: TEdit;
  25.     Label6: TLabel;
  26.     Edit6: TEdit;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure IdSMTP1Status(ASender: TObject; const AStatus: TIdStatus;
  29.       const AStatusText: string);
  30.     procedure Button1Click(Sender: TObject);
  31.   private
  32.     { Private declarations }
  33.   public
  34.     { Public declarations }
  35.     procedure Status(AMsg: string);
  36.   end;
  37. var
  38.   Form1: TForm1;
  39. implementation
  40. {$R *.dfm}
  41. uses INIFiles;
  42. procedure TForm1.Button1Click(Sender: TObject);
  43. begin
  44.   Button1.Enabled := False;
  45.   try
  46.     with IdMessage1 do begin
  47.       Clear;
  48.       From.Text := Trim(Edit1.Text);
  49.       Recipients.Add.Text := Trim(Edit2.Text);
  50.       Subject := Trim(Edit5.Text);
  51.       Body.Assign(memoMsg.Lines);
  52.     end;
  53.     with IdSMTP1 do begin
  54.       Host := Trim(Edit6.Text);
  55.       Username := Edit3.Text;
  56.       Password := Edit4.Text;
  57.       Connect; try
  58.         Send(IdMessage1);
  59.       finally
  60.         Disconnect;
  61.       end;
  62.     end;
  63.     Status('Completed');
  64.   finally
  65.     Button1.Enabled := True;
  66.   end;
  67. end;
  68. procedure TForm1.FormCreate(Sender: TObject);
  69. var
  70.   LINIFile: string;
  71. begin
  72.   LINIFile := 'c:/SMTP.ini';
  73.   if FileExists(LINIFile) then begin
  74.     with TINIFile.Create(LINIFile) do
  75.     try
  76.       Edit1.Text := ReadString('Main''From''');
  77.       Edit2.Text := ReadString('Main''To''');
  78.       Edit3.Text := ReadString('Main''UserName''');
  79.       Edit4.Text := ReadString('Main''Password''');
  80.       Edit5.Text := ReadString('Main''Subject''');
  81.       Edit6.Text := ReadString('Main''SMTP Server''');
  82.       memoMsg.Lines.Text := ReadString('Main''Message''');
  83.     finally
  84.       Free;
  85.     end;
  86.   end;
  87. end;
  88. procedure TForm1.IdSMTP1Status(ASender: TObject; const AStatus: TIdStatus;
  89.   const AStatusText: string);
  90. begin
  91.   Status(AStatusText);
  92. end;
  93. procedure TForm1.Status(AMsg: string);
  94. begin
  95.   ListBox1.ItemIndex := ListBox1.Items.Add(AMsg);
  96.   Application.ProcessMessages;
  97.   Application.ProcessMessages;
  98.   Application.ProcessMessages;
  99. end;
  100. end.
在C盘根目录下新建文件:SMTP.ini
文件内容格式如下:
  1. [Main]
  2. From=XXXXXXXX@sina.com
  3. To=ZZZZZZZZ@hotmail.com
  4. Subject=Test
  5. SMTP Server=smtp.sina.com
  6. Message=I Miss You!
  7. UserName=XXXXXXXX
  8. Password=YYYYYYYY
//初始化邮件类 void InitEmail(C01waSendMail* m_globalEmail,String sendermail,String sender,String senderpwd,String srv,int port = 25,bool bSsl = false) { m_globalEmail->m_Auth = CPJNSMTPConnection::AuthenticationMethod::AUTH_AUTO; m_globalEmail->m_bAutoDial = true; m_globalEmail->m_bSSL = bSsl; m_globalEmail->m_sUsername = sender.c_str(); m_globalEmail->m_sAddress = sendermail.c_str(); m_globalEmail->m_sPassword = senderpwd.c_str(); m_globalEmail->m_sHost = srv.c_str(); m_globalEmail->m_nPort = port; m_globalEmail->m_sEncodingFriendly = _T("Chinese Simplified (GB2312)"); m_globalEmail->m_sEncodingCharset = _T("gb2312"); m_globalEmail->m_bMime = 1; m_globalEmail->m_bHTML = 1; m_globalEmail->m_Priority = CPJNSMTPMessage::PRIORITY::NormalPriority; m_globalEmail->m_bDSN = FALSE; m_globalEmail->m_bDSNSuccess = FALSE; m_globalEmail->m_bDSNFailure = FALSE; m_globalEmail->m_bDSNDelay = FALSE; m_globalEmail->m_bDSNHeaders = FALSE; m_globalEmail->m_bDNSLookup = FALSE; } //发送邮件 void SendEmail(const char* recvemail,const char* subject,const char* body,const char * sCC=NULL,const char * bCC = NULL,const char * attach = NULL) { //初始化邮箱 //注意释放内存 C01waSendMail *m_globalEmail = new C01waSendMail; if(strlen(m_con1.m_eamil)>0&&strlen(m_con1.m_pwd)&&strlen(m_con1.m_smtpsrv)&&m_con1.port>0) { char * p = strdup(m_con1.m_eamil); char * pp = strstr(p,"@"); if(pp>0) pp[0] = '\0'; InitEmail(m_globalEmail,m_con1.m_eamil,p,m_con1.m_pwd,m_con1.m_smtpsrv,m_con1.port,m_con1.ssl); free(p); if(subject>0) m_globalEmail->m_sSubject.Format("%s",subject); if(sCC>0) m_globalEmail->m_sCC.Format("%s",sCC); if(bCC>0) m_globalEmail->m_sBCC.Format("%s",bCC); if(body>0) m_globalEmail->m_sBody.Format("%s",body); if(attach>0) m_globalEmail->m_sFile.Format("%s",attach); if(recvemail>0) m_globalEmail->m_sTo.Format("%s",recvemail); m_globalEmail->SendEmail(); } }
Delphi2010 实现邮件附件收发功能 TIdPOP3组件简介 TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。 在使用TIdPOP3组件时需设置它的几个成员属性。 Host :指定邮件服务器,一般为pop3邮件服务器的地址,如 pop3.126.com。 Username :用户名,也就是邮箱名,如billanking2002@126.com。 Password :邮箱密码,在进行收发邮件时组件需要凭密码进行登录。 其它成员属性 Connected:返回它与邮件服务器的连接状态,这true表示已经连接。 CheckMessages:邮件数,如果连接服务器成功,则可以获得服务器端的邮件数。 成员函数 procedure Connect(const ATimeout: Integer = IdTimeoutDefault); 与服务器连接函数。参数为无效连接时等待的毫秒数。 function RetrieveHeader(const MsgNum: Integer; AMsg: TIdMessage): Boolean; 接收邮件头信息,它有两个参数,MsgNum表示在接收第几个邮件,从1开始,AMsg为邮件消息组件实例。 function Retrieve(const MsgNum: Integer; AMsg: TIdMessage): Boolean; 接收邮件主体信息,它与 RetrieveHeader的参数是一样的。接收的邮件内容将保存在AMsg中。 function Delete(const MsgNum: Integer): Boolean; 删除邮件服务器中第几个邮件。从1开始。 procedure Disconnect; override; 关闭连接。 TIdMessage组件简介 TIdMessage用来支持邮件消息协议,如POP3,SMTP,NNTP等。TIdMessage支持多用途Internet邮件扩展(MIME)协议。 常用的TIdMessage的属性: Subject:邮件主题,这个字符串经过BASE64编码的。所以在使用时需对它进行解码。 MessageParts:这是TIdMessageParts类的一个实例,它用来存储邮件的信息。如邮件内容及附件信息。在进行解析时需要判断它是否为附件或文本,如果为附件时,其文件名是经过BASE64编码的。判断常量分别为TIdText , TIdAttachment。 Body:这是个字符串列表,包含构成该邮件的正文内容。 Form:发送邮件者的地址信息。 Recipients:收件人地址信息。 BccList:抄送地址列表。 CharSet:指示邮件信息中使用的字符集。 ContentType:指定MIME媒体数据类型,描述正文中包含的数据,使用户代理决定如何显示数据,常用的有text/html,text/xml。 TIdSMTP组件简介 TIdSMTP是TIdMessageClient派生出的一个简单邮件传输协议和SMTP客户端。 它的主要功能是发送邮件信息。 常用的属性: Host :SMTP邮件服务器的地址,如smtp.126.com。它与上面的POP3地址不一样。 AuthenticationType:服务器认证类型,它有atNone,atLogin两种,即不需要认证和需要凭用户名和密码进行认证。 Username:用户名,这里与TIdPOP3 有点不一样,即它不需要后缀,如billanking2002 Password:邮箱登录密码。如果AuthenticationType设置了atLongin则必须设置密码和用户名。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值