`
jiqimiao
  • 浏览: 58565 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

delphi电子邮件收发编程讲解与实例

 
阅读更多
在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
例:
ifnotnmpop31.connectthen
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方法后,该属性返回检索到的邮件信息,它是一个类
包含了以下几部份:
lAttachments:这是个tstringlist对象:包含了接收到邮件的附件名称
lBody:这是个tstringlist对象:包含了接收到邮件的正文
lFrom:发件人的e_mail地址
lHead:这是个tstringlist对象,包含了邮件头的标题
lMessageID:邮件的识别号
lSubject:邮件的主题
10、password,port,userid
向pop3服务器提交的用户密码,协议端口,用户识别名
11、RemoteIP
pop3服务器的IP地址
12、ReportLevel
指示了与pop3服务器的通话状态信息?
13、Status
返回当前状态信息
14、Summary
是一个类,包含邮件的统计信息。其中包含了以下几部份:
lBytes邮件的字节数;
lFrom发件人的邮件地址
lMessageID邮件的编号
lSubject这是邮件的主题
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(Varhandled:Boolean)
登陆服务器时,用户名与密码不能通过,将触发该事件。
更正了后,如果将Handled参数设为True,将再登陆一次。
2、OnAuthenticationNeeded(Varhandled:Boolean)
如果某个操作需要验证用户的身份,将触发这个事件。
例:
procedureTform1.NMPOP31AuthenticationNeeded(Varhandled:Boolean);
varnewpass,newid:string;
begin
newpass:=NMPOP31.password;
newid:=NMPOP31.userid;
inputquery(‘AuthenticationNeed‘,’inputuserid’,newid);
inputquery(‘AuthenticationNeed‘,’inputpassword’,newpass);
NMPOP31.userid;:=newid;
NMPOP31.password:=newpass;
Handled:=true;
end;
3、OnConnect
当与服务器连接成功时将显示触发该事件。
4、OnConnectFailed
当与服务器连接失败时将显示触发该事件
5、OnConnectRequired(Varhandled: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:
程序如下:
procedureTfrmMail.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事件中实现。代码如下:

procedureTfrmMail.btnConnectclick(Sender:Tobject);
begin
NMPOP31.host:=edtip.text;
NMPOP31.port:=strtoint(edtport.text);
NMPOP31.userid:=edtuser.text;
NMPOP31.password:=edtpass.text;
NMPOP31.connect;
end;
登陆成功处理:
procedureTfrmMail.NMPOP31Connect(Sender:Tobject);
begin
showmessage(‘连接成功’);
end;
登陆成功失败处理:
procedureTfrmMail.NMPOP31Connect(Sender:Tobject);
begin
showmessage(‘连接失败’);
end;
登陆成功就可获得邮件信息了。按获得邮件按钮进行处理。
procedureTfrmMail.btnGetMailclick(Sender:Tobject);
begin
NMPOP31.list;
end;
用了list方法,当检索到信息时将触发OnList事件。这个事件的参数含有邮件大小等信息。将这些信息添加到listView控件中显示出来。
procedureTfrmMail.NMPOP31list(MSG,size:integer);
var
listitem1:tlistitem;
begin
listitem1:=listview1.items.add;
listitem1.caption:=intostr(msg);
listitem1.subitems.add(intostr(size));
end;
在实际使用过程中,有可能用户在没有登陆服务器之前就使去获取邮件信息了
这时NMPOP3将触发OnConnectionRequired事件。这时可在这里要求重新连
服务器。
procedureTfrmMail.NMPOP31ConnectionRequired(varhandled:boolean);
begin
handled:=true;
NMPOP31.connect;
end;
用户可在listview控件中选择要看的邮件。
procedureTfrmMail.Listview1Click(varhandled:boolean);
varindex,I:integer;
begin
iflistview1.selected:=nilthen
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;
其它信息显示
procedureTfrmMail.NMPOP31Success(sender:tobject);
begin
statusbar1.simpletext:=’操作成功’;
end;
procedureTfrmMail.NMPOP31Failure(sender:tobject);
begin
statusbar1.simpletext:=’操作失败’;
end;
procedureTfrmMail.NMPOP31ConnectionFailed(sender:tobject);
begin
showmessage(‘连接失败’);
end;
procedureTfrmMail.NMPOP31InvalidHoat(varhandled:boolean);
begin
showmessage(‘无效的主机’);
handled:=true;
end;
最后退出邮件服务器
procedureTfrmMail.btnDisConnectonClick(sender:tobject);
begin
NMPOP31.disconnect;
end;
procedureTfrmMail.NMPOP31Disconnect(sender:tobject);
begin
statusbar1.simpletext:=’断开连接’;
end;


发送邮件NMSMTP


SMTP协议自身命令

命令说明
HELO客户机用HELO命令向服务器标识身份
MAIL初始化邮件传输
RCPT在MAIL命令后,标识单个邮件接收人
NOOP无操作,服务器响应OK
DATARCPT之后(通常),表示所有邮件接收人已标识,初始化数据传输
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
是一个类,存储要发送的邮件信息。具体如下:
lFromName:发件人名称
lFromAdress:发件人email地址。
lReplayToAdress:回复地址
lOrgranization:发件人所在地址。
lLocalProgram:发件人所用的客户程序
lToAdress:是Tstringlist对象,收件人的接收地址。
lToCC:Tstringlist对象,抄送的email地址。
lToBCC:Tstringlist对象,密送的email地址。
lAttachments:Tstringlist对象,指定的附件。
lBody:Tstringlist对象,邮件正文。
lSubject:邮件主题。
lDate:邮件发送日期,为空指当前日期。
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
邮件发送成功触发该事件。

实例:
procedureTfrmSendMail.btnSendClick(Sender:Tobject);
begin
ifedtAdress.text=’’then
exit;
ifedtport.text=’’then
exit;
ifedtSendusertext=’’then
exit;
ifedtReceiver.text=’’then
exit;
NMSMTP1.host:=edtAdress.text;
NMSMTP1.port:=strtoint(edPort.text);
NMSMTP1.UserId:=edtSenduser.text;
NMSMTP1.conncet;
end;
procedureTfrmSendMail.NMSMTP1ConnectionFailed(Sender:Tobject);
begin
showmessage(‘连接失败’);
end;
procedureTfrmSendMail.NMSMTP1Connection(Sender:Tobject);
begin
sendmessage(Handle,WM_LOGIN,0,0);//自定义消息息传送。产生WM_LOGIN事件
end;
procedureTfrmSendMail.WMLOGIN(varMSG: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;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics