delphi编写电子邮件的制作步骤

delphi 专栏收录该内容
49 篇文章 0 订阅
在delphi中TNMPop控件 -------接收电子邮件,pop3 
pop3协议自身命令 

命令     说明 
USER     向pop3服务器器传递用户名 
PASS     向pop3服务器器传递用户密码 
STAT     获取当前用户的邮件数 
LIST     获取邮件标号和大小 
BETR     获取邮件的全部信息,包括邮件头和邮件内容 
TOP     获取邮件头 
DELE     删除指定的邮件 
NOOP     空操作 
QUIT     退出主机对话 

控件属性 
1、       AttachFilePath      
指定附件存放路径,为空指当前路径 
2、       BytesRecvd        
收了多少个字节 
3、       BytesTotal  
本次传输总的字节数 
4、       Connected 
与pop3服务器建立了连接则返回true,否则为false 
例: 
if not nmpop31.connect then 
begin 
  nmpop31.port:=110; 
  nmpop31.userid:=’username’; 
  nmpop31.password:=’userpassword’; 
  nmpop31.connect;  
end; 
5、       DeleteOnRead 
如果属性为true时,则当邮件下载后从服务器删除掉 
6、       host 
服务器主机名或ip地址 
7、       LocalIp 
返回客户的IP地址,如果有多个,则只返回第一个。 
8、       mailcount 
返回邮件数 
9、       mailmessage 
调用了getmailmessage方法后,该属性返回检索到的邮件信息,它是一个类 
包含了以下几部份: 
l     Attachments:这是个tstringlist对象:包含了接收到邮件的附件名称 
l     Body: 这是个tstringlist对象:包含了接收到邮件的正文 
l     From:发件人的e_mail地址 
l     Head: 这是个tstringlist对象,包含了邮件头的标题 
l     MessageID:邮件的识别号 
l     Subject:邮件的主题 
10、password,port,userid 
  向pop3服务器提交的用户密码,协议端口,用户识别名 
11、RemoteIP 
  pop3服务器的IP地址 
12、ReportLevel 
指示了与pop3服务器的通话状态信息? 
13、Status 
  返回当前状态信息 
14、Summary 
是一个类,包含邮件的统计信息。其中包含了以下几部份: 
l     Bytes邮件的字节数; 
l     From 发件人的邮件地址 
l     MessageID邮件的编号 
l     Subject这是邮件的主题 
15、TimeOut 
  单位毫秒数,当Socket在这里所指定时间内没有响应,将会触发异常。 
16、TransactionReply 
  返回上次命令执行结果。 
****************************************************************** 
控件方法: 
1、     Abort 
中止此次接收,且断开与Pop3服务器的连接。 
2、     Connect 
  与Pop3服务器的连接,但事先设好host,port,userid,password属性。 
  例: 
    Nmpop31.host:=”mail.wofoo.com”; 
    Nmpop31.port:=110; 
    Nmpop31.reportlevel:=1; 
    Nmpop31.timeout:=1000; 
    Nmpop31.connect; 
3、     DeleteMessage(MailNumber:integer) 
从Pop3服务器删除一个邮件号为MailNumber的邮件。注:这里并没有真正删除,当在断开边接之前调用reset,将被恢复。 
4、     Disconnect 
断开与Pop3服务器的连接。 
5、     GetMailMessage(MailNumber:integer) 
  从Pop3服务器下载一个邮件号为MailNumber的邮件 
6、     GetSummary(MMailNumber:integer) 
得到一个邮件信息,其邮件号为MailNumber。 
7、     List 
从邮件服务器检索一个列表。该列表包含每一封邮件的编号和字节数,列表中的每一项将触发一个Onlist事件。 
8、     Reset  
将恢复服务器中所有标记为已删除的邮件。 
************************************************************** 
控件事件: 
1、     OnAuthenticationFailed (Var handled:Boolean) 
登陆服务器时,用户名与密码不能通过,将触发该事件。 
更正了后,如果将Handled参数设为True,将再登陆一次。 
2、     OnAuthenticationNeeded(Var handled:Boolean) 
如果某个操作需要验证用户的身份,将触发这个事件。 
例: 
procedure Tform1.NMPOP31 AuthenticationNeeded(Var handled:Boolean); 
var newpass,newid:string; 
begin 
newpass:= NMPOP31 .password; 
newid:= NMPOP31.userid; 
inputquery(‘Authentication Need ‘,’ input userid’,newid); 
inputquery(‘Authentication Need ‘,’ input password’ ,newpass); 
NMPOP31.userid;:=newid; 
NMPOP31.password:=newpass; 
Handled:=true; 
end; 
3、     OnConnect 
当与服务器连接成功时将显示触发该事件。 
4、     OnConnectFailed 
当与服务器连接失败时将显示触发该事件 
5、     OnConnectRequired (Var handled:Boolean) 
Pop控件大多数方法是在与服务器连接成功后才会有意思。如果调用方法时与服务器连接不成功时,将触发该事件。此时应重新调用connect方法,且将Handled参数设为True; 
6、     OnDisconnect 
当与服务器断开连接时将触发该事件,如果要访问VCL控件,最好先判断它存不存在。 
7、     OnFailure 
如果删除该邮件出错时,触发该事件。 
8、     OnInvalidHost 
与主机连接时发现指定主机名不存在,触发该事件。 
9、OnList 
  当程序调用list过程时,每检索到一项将会触发该事件一次。MSG参数是邮 
  件编号,Size参数是邮件字节数。 
10、OnPacketRecvd 
  每收到一个数据块时,将触发一次该事件。可用BytesTotal和BytesRecvd属性显示邮件接收进度。 
11、OnReset 
  当程序调用Reset过程恢复已经有删除标记的邮件时,触发该事件。 
12、OnRetrieveStar 
  当程序调用GetMailMessage过程或GetSummary过程开始检索数据时将会触发该事件。 
13、OnRetrieveEnd 
  当程序调用GetMailMessage过程或GetSummary过程检索数据成功时将会触发该事件 

实例1: 
程序如下: 
procedure TfrmMail.FormCreate(Sender:Tobject); 
begin 
//服务器信息 
edtIP.text:=’mail.wofoo.com’ 
edtPort.text:=’110’; 
//用户信息 
edtUser.text:=’mis’; 
edtpass.passwordchar:=’*’; 
edtpass.text:=’123’; 
//其它 
edtmail.text:=’’; 
edtsubject.text:=’’; 
memo1.lines.clear; 
//pop3控件参数设置 
NMPOP31.deleteonread:=false; 
NMPOP31.timeout:=5000; 
NMPOP31.deleteonread:=false; 
NMPOP31.Reportlevel:=Status_Basic; 
//显示其它选项 
memo1.scrollbars:=ssboth; 
end; 
首先要登陆服务器,在btnConnect的onclick事件中实现。代码如下: 

procedure TfrmMail. btnConnect click(Sender:Tobject); 
begin 
NMPOP31.host:=edtip.text; 
NMPOP31.port:=strtoint(edtport.text); 
NMPOP31.userid:=edtuser.text; 
NMPOP31.password:=edtpass.text; 
NMPOP31.connect; 
end; 
登陆成功处理: 
procedure TfrmMail. NMPOP31 Connect (Sender:Tobject); 
begin 
  showmessage(‘连接成功’); 
end; 
登陆成功失败处理: 
procedure TfrmMail. NMPOP31 Connect (Sender:Tobject); 
begin 
  showmessage(‘连接失败’); 
end; 
登陆成功就可获得邮件信息了。按获得邮件按钮进行处理。 
procedure TfrmMail. btnGetMailclick(Sender:Tobject); 
begin 
NMPOP31.list; 
end; 
用了list方法,当检索到信息时将触发OnList事件。这个事件的参数含有邮件大小等信息。将这些信息添加到listView控件中显示出来。 
procedure TfrmMail. NMPOP31list (MSG,size:integer); 
var  
listitem1:tlistitem; 
begin 
  listitem1:=listview1.items.add; 
  listitem1.caption:=intostr(msg); 
  listitem1.subitems.add(intostr(size)); 
end; 
在实际使用过程中,有可能用户在没有登陆服务器之前就使去获取邮件信息了 
这时NMPOP3将触发OnConnectionRequired事件。这时可在这里要求重新连 
服务器。 
procedure TfrmMail. NMPOP31ConnectionRequired (var handled:boolean); 
begin 
handled:=true; 
NMPOP31.connect; 
end; 
用户可在listview控件中选择要看的邮件。 
procedure TfrmMail. Listview1Click(var handled:boolean); 
var index,I:integer; 
begin 
if listview1.selected:=nil then  
  exit; 
//获取所选的标识 
index:=strtoint(listview1.selected.capton); 
//获取邮件 
NMPOP31.GetMessage(index); 
//获取邮件信息 
edtmail.text:=nmpop31.mailmessage.from; 
edtsubject.text:= nmpop31.mailmessage.subject; 
memo1.lines.assign(nmpop31.mailmessage.body); 
end; 
其它信息显示 
procedure TfrmMail. NMPOP31Success (sender:tobject); 
begin 
statusbar1.simpletext:=’操作成功’; 
end; 
procedure TfrmMail. NMPOP31Failure (sender:tobject); 
begin 
statusbar1.simpletext:=’操作失败’; 
end; 
procedure TfrmMail. NMPOP31ConnectionFailed (sender:tobject); 
begin 
showmessage(‘连接失败’); 
end; 
procedure TfrmMail. NMPOP31InvalidHoat(var handled:boolean); 
begin 
showmessage(‘无效的主机’); 
handled:=true; 
end; 
最后退出邮件服务器 
procedure TfrmMail. btnDisConnectonClick(sender:tobject); 
begin 
NMPOP31.disconnect; 
end; 
procedure TfrmMail. NMPOP31Disconnect (sender:tobject); 
begin 
statusbar1.simpletext:=’断开连接’; 
end; 


发送邮件NMSMTP 


SMTP协议自身命令 

命令     说明 
HELO     客户机用HELO命令向服务器标识身份 
MAIL     初始化邮件传输 
RCPT     在MAIL命令后,标识单个邮件接收人 
NOOP     无操作,服务器响应OK 
DATA     RCPT之后(通常),表示所有邮件接收人已标识,初始化数据传输 
HELP     客户机可使用此命令查询服务器支持什幺命令 
QUIT     会话结束 

NMSMTP 
属性 
1、     ClearParams属性 
为真时,邮件发送完毕会把PostMessage属性的值清空 
2、     EncodeType 
指定邮件编码方式。uuMIME—MIME 编码;unCode---UUEncoding编码 
3、     FinalHeader 
指定最后的消息头标。 
4、Host 
SMTP服务器的主机名或IP地址。 
5、LocalIP 
  返回客户机的IP地址,若有多个只返回一个。 
6、Port 
  指定服务器的端口 
7、PostMessage 
  是一个类,存储要发送的邮件信息。具体如下: 
l     FromName:发件人名称 
l     FromAdress:发件人email地址。 
l     ReplayToAdress:回复地址 
l     Orgranization:发件人所在地址。 
l     LocalProgram:发件人所用的客户程序 
l     ToAdress:是Tstringlist对象,收件人的接收地址。 
l     ToCC: Tstringlist对象,抄送的email地址。 
l     ToBCC: Tstringlist对象,密送的email地址。 
l     Attachments: Tstringlist对象,指定的附件。 
l     Body: Tstringlist对象,邮件正文。 
l     Subject:邮件主题。 
l     Date:邮件发送日期,为空指当前日期。 
9、     ReplayNumber 
只读属性,返回smtp服务器响应应答信息。 
10、status 
  当前状态信息。 
11、Timeout 
  毫秒级别的单位,如果规定时间Socket没有响应,触发异常。 
12、TransactionReply 
  返回上一次命令的执行结果。 
13、UserID 
  指定的用户名。 

控件方法 
   
1、     Abort 
中止发送,断开与smtp服务器的连接 
2、     ClearParameters 
清空PostMessage。 
3、     Connect 
登陆SMTP服务器,注意要先设好host,port属性。Host非法触发OnValidHost事件,连接失败触发OnConnectFalied事件。如果连接成功触发OnConnect事件。 
4、     DisConnect 
断开与服务器的连接。触发OnDisconnect事件。 
5、     ExpandList(MailList:string):Boolean; 
该过程在SMTP服务器上检索一个邮件列表,如果有触发OnMailListReturn事件,可以取得这个邮件列表。 
6、     SendMail 
发送邮件,事先要设好host,port,PostMessage 
7、     Verify(UserName:string):Boolean; 
检验用户名是否合法,合法为True; 

事件: 
1、     OnAttachmentNotFound 
如果没找到postMessage所指定的邮件,该事件触发,同时有传进附件名的参数。 
2、OnAuthenticationFailed 
当SMTP需要用户名和口令才能发送,而事先没给用户名和密码或给出的有错,该事件触发。 
3、OnConnect 
  与服务器连接成功后,触发该事件。 
4、     OnConnectFailed 
与服务器连接失败,触发该事件。 
5、     OnDisconnect 
断开与服务器连接触发该事件。 
6、     OnEnacodeStart 
当附件开始编码时,触发该事件 
7、     OnEnacodeEnd 
当附件编码结束时,触发该事件。参数FileName,初编码的附件。 
8、     OnFailure 
当邮件发送不成功时,触发该事件 
9、     OnHeaderIncomplete 
发送邮件时,当postmessage给出的头标信息不完整时,触发 
10、OnHostResolved与OnIvalidHost 
  当服务器的主机名找到触发该事件,否则触发OnIvalidHost 
11、OnMailListReturn 
  当程序调用ExpandList,每检索到一个email地址,就触发该事件一次。 
12、OnRecipientNotFound 
  如果PostMessage所指定的收件人不成再时,触发该事件。 
13、OnSendStart 
  邮件发送开始触发该事件。 
14、OnSuccess 
  邮件发送成功触发该事件。 

实例: 
procedure TfrmSendMail.btnSendClick(Sender:Tobject); 
begin 
if edtAdress.text=’’ then  
  exit; 
if edtport.text=’’ then  
  exit; 
if edtSendusertext=’’ then  
  exit; 
if edtReceiver.text=’’ then  
  exit; 
NMSMTP1.host:=edtAdress.text; 
NMSMTP1.port:=strtoint(edPort.text); 
NMSMTP1.UserId:=edtSenduser.text; 
NMSMTP1.conncet; 
end; 
procedure TfrmSendMail. NMSMTP1 ConnectionFailed(Sender:Tobject); 
begin 
showmessage(‘连接失败’); 
end; 
procedure TfrmSendMail. NMSMTP1 Connection (Sender:Tobject); 
begin 
sendmessage(Handle,WM_LOGIN,0,0);//自定义消息息传送。产生WM_LOGIN事件 
end; 
procedure TfrmSendMail. WMLOGIN (var MSG:TWM);//处理自定义消息 
begin 
//这里发送邮件。 
NMSmTP1.postmessage.fromadress:=edtuserMail.text; 
NMSmTP1.postmessage.fromname:=edtsenderuser.text; 
NMSmTP1.postmessage.subject:=edtsubject.text; 
NMSmTP1.postmessage.toadress.add(edtreceiver.text);  
NMSmTP1.postmessage.attachments.addstrings(listbox1.items); 
NMSmTP1.postmessage.body.assign(memo1.lines); 
NMSMTP1.SENDMAIL; 
NMSMTP1.DISCONNCET; 
end;  
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值