曹刿论战教学思路: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:
内容
客户端: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;
}