怎样和SMTP服务器交互? (190分)

  • 主题发起人 主题发起人 运通
  • 开始时间 开始时间

运通

Unregistered / Unconfirmed
GUEST, unregistred user!
我看过了SMTP的介绍,说是连接SMTP服务器,然后传指令,等待回应……

不过,我就不知道在DH中这样给它发指令呢?
望高人指点,仅有190分,全奉上。
 
给你一个简单的试验方法!
用TELNET连接SMTP服务器:
开始->运行->输入:telnet mail.0451.com 25[CR]
TELNET 是windows下默认的TELNET客户端软件
mail.0451.com 是SMTP服务器地址你也可以用你自己熟悉的
25 是SMTP服务器使用的端口号
当连接建立以后会看到提示信息,然后可以输入
HELP[CR]
可以看到服务器支持的指令列表一般包括如下命令
HELO
MAIL FROM
VRFY
RCPT TO
DATA
如果你需要发送电子邮件那么则需要这样
HELO MYNAME[CR]
MAIL FROM:<MYNAME@ABC.COM>[CR]
RCPT TO:<SENT@ABC.COM>[CR]
RCPT TO:<SENT1@ABC.COM>[CR]
DATA[CR]
FROM:MYNAME@ABC.COM[CR]
TO:SENT@ABC.COM[CR]
SUBJECT:邮件标题[CR]
[CR]
邮件正文[CR]
.[CR]
这样你就可以将一封标题为“邮件标题”内容为“邮件正文”
的邮件发给SENT@ABC.COM和SENT1@ABC.COM。
其余的你自己可以慢慢的摸索!
如果你使用ICS空间包中的WSOCKET控件那么你可以使用SENDSTR()
函数来完成你在TELNET中手工完成的工作,不过每个发送的字符
串的结尾一定要是#13#10不然服务器无法接收到指令!有问题可
以在问我.
MSN:LUOKAI@UP369.COM
 
你是需要通过自己的SMTP组件发送邮件么?
 

clientSocket1.host := 'smtp.machine';
clientsocket1.port := 25;
clientsocket1.clienttype := ctblock;
clientsocket1.open;
sCommand := 'some smtp command';
clientsocket1.sendbuf(PChar(sCommand), length(sCommand));
发送完命令后,准备接收信息。
写个线程对它返回的结果进行接受。

procedure TMyThread.Execute;
var
Event: THandle;
begin
Event := WSACreateEvent;
WSAEventSelect(clientSocket1.Socket.SocketHandle, Event, False, FD_READ or FD_CLOSE);
case MsgWaitForMutipleObjects(1, False, Event, TimeOut, QS_ALLINPUT) of
WAIT_OBJECT_0:
begin
WSAResetEvent(Event);
Count := ClientSocket1.Socket.ReciveBuf(Buffer, Count);
//PostMessage(Form1.Handle, WM_RecvBuffer, Count, Integer(Buffer));
end;
end;
WSACloseEvent(Event);
end;
end;
 
哦,在DFW中有一个CoolMail控件就是用ClientSocket来进行对POP3, SMTP进行收发信的,
你找一下看看。
 
对于接受信息,也可以用一个循环
while do来实现,不过while do 里边一定要有Application.ProcessMessage哟,否
则会死锁的。(前车之鉴^_^)
 
多人接受答案了。
 
后退
顶部