|
|
2#

楼主 |
发表于 2008-10-25 23:56:41
|
只看该作者

服务器端: 220 server.com Simple Mail Transfer Service Ready
2、 客户端使用“HELO”命令标识发件人
客户端:HELO server.com
服务器端:250 server.com
3、 客户端发送MAIL命令,服务器端以OK作为响应表明准备接收
客户端: MAIL FROM: 〈A@B.com〉
服务器端: 250 OK
4、 客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件
客户端:RCPT TO: 〈c@d.com〉
服务器端:250 OK
5、 协商结束后用命令DATA发送发送邮件
客户端:DATA
服务器端:354 Start mail input: end with 〈CRLF〉。〈CRLF〉
6、 客户端以。表示结束输入内容一起发送出去
客户端:Subject: 〈CRLF〉
内容〈CRLF〉
。〈CRLF〉
7、客户端用QUIT命令退出。
客户端:QUIT
服务器端:250 server.com closing transmission channel
优点:可以在此基础上开发出自己的组件,利用Sockets我们可以进行网络编程开发
缺点:程序量相对较多,
发送邮件的代码如下:
Dim sendData As String
Dim szData As Byte()
Dim CRLF As String
CRLF = "\r\n"
'创建与服务器25端口的连接
Dim SmtpServ As New TcpClient(txtsmtp.Text, 25)
lstlog.Items.Clear()
'显示服务器初始信息
Dim.NetStrm As.NetworkStream
.NetStrm = SmtpServ.GetStream()
Dim RdStrm As New StreamReader(SmtpServ.GetStream())
If RdStrm.ReadLine() 〈〉 "" Then lstlog.Items.Add(RdStrm.ReadLine())
'
sendData = "HELO server " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'标志发件人
sendData = "MAIL FROM: " + "〈" + txtfrom.Text + "〉" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'标志收件人
sendData = "RCPT TO: " + "〈" + txtTo.Text + "〉" + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'准备发送内容
sendData = "DATA " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'发送主题
sendData = "SUBJECT: " + txtsub.Text + CRLF
'发送内容
sendData = sendData + txtmsg.Text + CRLF
'结束发送
sendData = sendData + "." + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'退出
sendData = "QUIT " + CRLF
szData = System.Text.Encoding.ASCII.GetBytes(sendData.ToCharArray())
.NetStrm.Write(szData, 0, szData.Length)
lstlog.Items.Add(RdStrm.ReadLine())
'关闭连接
.NetStrm.Close()
RdStrm.Close()
lstlog.Items.Add("连接关闭")
lstlog.Items.Add("发送成功") |
|