C#开发Windows 应用
程序中使用System.Net.Sockets
也是基于SMTP协议
一、SMTP协议简介
1、 客户端通过服务器的25端口建立TCP/IP连接
服务器端: 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)
lstlo