曹刿论战教学思路:C#编程发送邮件

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 23:33:22

C#编程发送邮件

上一篇 / 下一篇  2010-01-05 15:50:39

查看( 141 ) / 评论( 0 ) / 评分( 0 / 0 )

本文简单介绍SMTP协议以及如何用C#编程实现EMAIL发送。

一、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:
服务器端: 250 OK
4、   客户端发送RCPT命令标识收件人,服务器端回应是否愿意为收件人接受邮件
客户端:RCPT TO:
服务器端:250 OK
5、   协商结束后用命令DATA发送发送邮件
客户端:DATA
服务器端:354 Start mail input: end with .
6、   客户端以.表示结束输入内容一起发送出去
客户端:Subject:  
内容
7、客户端用QUIT命令退出。 
               客户端:QUIT
服务器端:250 server.com closing transmission channel
二、SMTP客户端程序代码:
1、   用VS.NET新建一个C#   WINDOWS应用程序项目,命名为SMTP。
2、   在窗体上添加控件:
一个按钮:设置属性name->btnsend;text->发送
六个标签:分别提示服务器地址、发件人、收件人、主题、内容以及发送记录
五个文本框:服务器地址txtsmtp、发件人txtfrom、收件人txtto、主题txtsub、内
容txtmsg对应相应的标签放置。
 一个列表框:lstlog
3、在程序开头添加以下名字空间:

        using System.Data;

using System.Net;

using System.Net.Sockets;

using System.IO;
4、在 btnsend_Click 函数中添加代码

        private void btnsend_Click(object sender, System.EventArgs e)

{

                  // 将鼠标形状改为漏斗状

               Cursor cr = Cursor.Current;

               Cursor.Current = Cursors.WaitCursor;

               //定义变量

               string Data;

               byte[] szData;

               string CRLF = "\r\n";

               //创建与服务器25端口的连接

               TcpClient SmtpServ = new TcpClient(txtsmtp.Text,25);
               lstlog.Items.Clear();            
                    //显示服务器初始信息
                    NetworkStream NetStrm = SmtpServ.GetStream();
                    StreamReader   RdStrm= new StreamReader(SmtpServ.GetStream());
                    lstlog.Items.Add(RdStrm.ReadLine());
                    //标志发件人
                    Data = "HELO server " + CRLF;                  
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                    lstlog.Items.Add(RdStrm.ReadLine());
                    //标志发件人
                    Data = "MAIL FROM: " + "<" + txtfrom.Text + ">" + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                   lstlog.Items.Add(RdStrm.ReadLine(
                    // 标志收件人
                    Data = "RCPT TO: " + "<" + txtto.Text + ">" + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                    lstlog.Items.Add(RdStrm.ReadLine());
                    //准备发送内容
                    Data = "DATA " + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                    lstlog.Items.Add(RdStrm.ReadLine());               
                    //发送主题
                    Data = "SUBJECT: " + txtsub.Text + CRLF ;
                    //发送内容
                    Data = Data+ txtmsg.Text + CRLF ;
                    //结束发送
                    Data = Data+ "." + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                    lstlog.Items.Add(RdStrm.ReadLine());               
                    //退出
                    Data = "QUIT " + CRLF;
                    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
                    NetStrm.Write(szData,0,szData.Length);
                    lstlog.Items.Add(RdStrm.ReadLine());               
                    //关闭连接
                    NetStrm.Close();
                    RdStrm.Close();
                    lstlog.Items.Add("连接关闭");
                    lstlog.Items.Add("发送成功");
                    //将鼠标恢复箭头状
                   Cursor.Current = cr;
               }