打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#编程发送邮件

C#编程发送邮件

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

本文简单介绍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;
               }

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用Visual C#实现POP3邮件接收程序
PTA 1014 福尔摩斯的约会 (20 分) C#
利用Tcp和socket实现的客户端与服务端的简单通信
toCharArray()的用法和意思
Arduino字符串转换为字符数组
在Windows下使用git时出现 warning: LF will be replaced by CRLF in xxx.
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服