动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 手机学院 | 邮件系统 | 网络安全 | 认证考试
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C#应用
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C#应用 ]的信息

本月文章推荐
.给datagrid的按钮列添加css.
.c#.net连接access操作类.
.用Visual C#来增加数据记录(1).
.在C#中运用SQLDMO备份和恢复Micr.
.C#中判断字符串A中是否包含字符串.
.利用c#制作简单的留言板(1) .
.C#纯数学方法递归实现货币数字转.
.用C#动态创建Access数据库.
.通过win32api让c#控制Windows任务.
.使用foreach来读取记录.
.c#数据库操作的3种典型用法.
.在dotnet下用c#编写下载器.
.C#中使用net share命令时要注意的.
.用C#访问ACCESS数据库问题.
.用C#截取指定长度的中英文混合字.
.c#调用des64.dll进行加密解密.
.Visual C#创建和使用ActiveX组件.
.使用C# 2.0泛型实现单例模式重用.
.StringWriter实现的一个功能.
.在C#中使用热键隐含窗口.

C#实现SMTP服务器,使用TCP命令实现,功能比较完善

发表日期:2004-10-25 |


using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;

namespace SkyDev.Web.Mail
{
 public enum MailFormat{Text,HTML};
 public enum MailPriority{Low=1,Normal=3,High=5};

 #region Class mailAttachments
 public class MailAttachments
 {
  private const int MaxAttachmentNum=10;
  private IList _Attachments;

  public MailAttachments()
  {
   _Attachments=new ArrayList();
  }

  public string this[int index]
  {
   get { return (string)_Attachments[index];}
  }
  /// <summary>
  /// 添加邮件附件
  /// </summary>
  /// <param name="FilePath">附件的绝对路径</param>
  public void Add(params string[] filePath)
  {
   if(filePath==null)
   {
    throw(new ArgumentNullException("非法的附件"));
   }
   else
   {   
    for(int i=0;i<filePath.Length;i++)
    {
     Add(filePath[i]);
    }
   }
  }

  /// <summary>
  /// 添加一个附件,当指定的附件不存在时,忽略该附件,不产生异常。
  /// </summary>
  /// <param name="filePath">附件的绝对路径</param>
  public void Add(string  filePath)
  {
   //当附件存在时才加入,否则忽略
   if (System.IO.File.Exists(filePath))
   {
    if (_Attachments.Count<MaxAttachmentNum)
    {
     _Attachments.Add(filePath);
    }
   }
  }

  public void Clear()//清除所有附件
  {
   _Attachments.Clear();
  }

  public int Count//获取附件个数
  {
   get { return _Attachments.Count;}
  }

 }
 #endregion//end Class mailAttachments

 

 #region Class MailMessage
 /// <summary>
 /// MailMessage 表示SMTP要发送的一封邮件的消息。
 /// </summary>
 public class MailMessage
 {
  private const int MaxRecipientNum=10;
  public MailMessage()
  {  
   _Recipients=new ArrayList();//收件人列表
   _Attachments=new MailAttachments();//附件
   _BodyFormat=MailFormat.Text;//缺省的邮件格式为Text
   _Priority=MailPriority.Normal;
   _Charset="GB2312";
  }

  /// <summary>
  /// 设定语言代码,默认设定为GB2312,如不需要可设置为""
  /// </summary>
  public string Charset
  {
   get { return _Charset;}
   set { _Charset=value;}
  }

  public string From
  {
   get{ return _From;}
   set { _From=value;}
  }

  public string FromName
  {
   get { return _FromName;}
   set { _FromName=value;}
  }
  public string Body
  {
   get { return _Body;}
   set { _Body=value;}
  }

  public string Subject
  {
   get { return _Subject;}
   set { _Subject=value;}
  }

  public MailAttachments Attachments
  {
   get {return _Attachments;}
   set { _Attachments=value;}
  }

  public MailPriority Priority
  {
   get { return _Priority;}
   set { _Priority=value;}
  }

  public IList Recipients
  {
   get { return _Recipients;}
  }
  /// <summary>
  /// 增加一个收件人地址
  /// </summary>
  /// <param name="recipient">收件人的Email地址</param>
  public void AddRecipients(string recipient)
  {
   //先检查邮件地址是否符合规范
   if (_Recipients.Count<MaxRecipientNum)
   {
    _Recipients.Add(recipient);//增加到收件人列表
   }
  }

  public void AddRecipients(params string[] recipient)
  {
   if (recipient==null)
   {
    throw (new ArgumentException("收件人不能为空."));
   }
   else
   {
    for (int i=0;i<recipient.Length;i++)
    {
     AddRecipients(recipient[i]);
    }
   }
  }

  public MailFormat BodyFormat
  {
   set { _BodyFormat=value;}
   get { return _BodyFormat;}
  }

  private string _From;//发件人地址
  private string _FromName;//发件人姓名
  private IList _Recipients;//收件人
  private MailAttachments _Attachments;//附件
  private string _Body;//内容
  private string _Subject;//主题
  private MailFormat _BodyFormat;//邮件格式
  private string _Charset="GB2312";//字符编码格式
  private MailPriority _Priority;//邮件优先级
 }
 #endregion


 #region Class SmtpMail
 public class SmtpServerHelper
 {
  private string CRLF="\r\n";//回车换行

  /// <summary>
  /// 错误消息反馈
  /// </summary>
  private string errmsg;

  /// <summary>
  /// TcpClient对象,用于连接服务器
  /// </summary>
  private TcpClient tcpClient;

  /// <summary>
  /// NetworkStream对象
  /// </summary>
  private NetworkStream networkStream;

  /// <summary>
  /// 服务器交互记录
  /// </summary>
  private string logs="";

  /// <summary>
  /// SMTP错误代码哈希表
  /// </summary>
  private Hashtable ErrCodeHT = new Hashtable();

  /// <summary>
  /// SMTP正确代码哈希表
  /// </summary>
  private Hashtable RightCodeHT = new Hashtable();

  public SmtpServerHelper()
  {
   SMTPCodeAdd();//初始化SMTPCode
  }

  ~SmtpServerHelper()
  {
   networkStream.Close();
   tcpClient.Close();
  }

  /// <summary>
  /// 将字符串编码为Base64字符串
  /// </summary>
  /// <param name="str">要编码的字符串</param>
  private string Base64Encode(string str)
  {
   byte[] barray;
   barray=Encoding.Default.GetBytes(str);
   return Convert.ToBase64String(barray);
  }

  /// <summary>
  /// 将Base64字符串解码为普通字符串
  /// </summary>
  /// <param name="str">要解码的字符串</param>
  private string Base64Decode(string str)
  {
   byte[] barray;
   barray=Convert.FromBase64String(str);
   return Encoding.Default.GetString(barray);
  }

  /// <summary>
  /// 得到上传附件的文件流
  /// </summary>
  /// <param name="FilePath">附件的绝对路径</param>
  private string GetStream(string FilePath)
  {
   //建立文件流对象
   System.IO.FileStream FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open);
   byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)];
   FileStr.Read(by,0,by.Length);
   FileStr.Close();
   return(System.Convert.ToBase64String(by));
  }

  /// <summary>
  /// SMTP回应代码哈希表
  /// </summary>
  private void SMTPCodeAdd()
  {
   //[RFC 821 4.2.1.]
   /*
     4.2.2.  NUMERIC ORDER LIST OF REPLY CODES

   211 System status, or system help reply
   214 Help message
      [Information on how to use the receiver or the meaning of a
      particular non-standard command; this reply is useful only
      to the human user]
   220 <domain> Service ready
   221 <domain> Service closing transmission channel
   250 Requested mail action okay, completed
   251 User not local; will forward to <forward-path>
         
   354 Start mail input; end with <CRLF>.<CRLF>
         
   421 <domain> Service not available,
    closing transmission channel
      [This may be a reply to any command if the service knows it
      must shut down]
   450 Requested mail action not taken: mailbox unavailable
      [E.g., mailbox busy]
   451 Requested action aborted: local error in processing
   452 Requested action not taken: insufficient system storage
         
   500 Syntax error, command unrecognized
      [This may include errors such as command line too long]
   501 Syntax error in parameters or arguments
   502 Command not implemented
   503 Bad sequence of commands
   504 Command parameter not implemented
   550 Requested action not taken: mailbox unavailable
      [E.g., mailbox not found, no access]
   551 User not local; please try <forward-path>
   552 Requested mail action aborted: exceeded storage allocation
   553 Requested action not taken: mailbox name not allowed
      [E.g., mailbox syntax incorrect]
   554 Transaction failed
  
   */

   ErrCodeHT.Add("421","服务未就绪,关闭传输信道");
   ErrCodeHT.Add("432","需要一个密码转换");
   ErrCodeHT.Add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
   ErrCodeHT.Add("451","放弃要求的操作;处理过程中出错");
   ErrCodeHT.Add("452","系统存储不足,要求的操作未执行");
   ErrCodeHT.Add("454","临时认证失败");
   ErrCodeHT.Add("500","邮箱地址错误");
   ErrCodeHT.Add("501","参数格式错误");
   ErrCodeHT.Add("502","命令不可实现");
   ErrCodeHT.Add("503","服务器需要SMTP验证");
   ErrCodeHT.Add("504","命令参数不可实现");
   ErrCodeHT.Add("530","需要认证");
   ErrCodeHT.Add("534","认证机制过于简单");
   ErrCodeHT.Add("538","当前请求的认证机制需要加密");
   ErrCodeHT.Add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
   ErrCodeHT.Add("551","用户非本地,请尝试<forward-path>");
   ErrCodeHT.Add("552","过量的存储分配,要求的操作未执行");
   ErrCodeHT.Add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
   ErrCodeHT.Add("554","传输失败");
  

   /*
   211 System status, or system help reply
   214 Help message
      [Information on how to use the receiver or the meaning of a
      particular non-standard command; this reply is useful only
      to the human user]
   220 <domain> Service ready
   221 <domain> Service closing transmission channel
   250 Requested mail action okay, completed
   251 User not local; will forward to <forward-path>
         
   354 Start mail input; end with <CRLF>.<CRLF>
   */

   RightCodeHT.Add("220","服务就绪");
   RightCodeHT.Add("221","服务关闭传输信道");
   RightCodeHT.Add("235","验证成功");
   RightCodeHT.Add("250","要求的邮件操作完成");
   RightCodeHT.Add("251","非本地用户,将转发向<forward-path>");
   RightCodeHT.Add("334","服务器响应验证Base64字符串");
   RightCodeHT.Add("354","开始邮件输入,以<CRLF>.<CRLF>结束");

  }

  /// <summary>
  /// 发送SMTP命令
  /// </summary>
  private bool SendCommand(string str)
  {
   byte[]WriteBuffer;
   if(str==null||str.Trim()==String.Empty)
   {
    return true;
   }
   logs+=str;
   WriteBuffer = Encoding.Default.GetBytes(str);
   try
   {
    networkStream.Write(WriteBuffer,0,WriteBuffer.Length);
   }
   catch
   {
    errmsg="网络连接错误";
    return false;
   }
   return true;
  }

  /// <summary>
  /// 接收SMTP服务器回应
  /// </summary>
  private string RecvResponse()
  {
   int StreamSize;
   string Returnvalue = String.Empty;
   byte[] ReadBuffer = new byte[1024] ;
   try
   {
    StreamSize=networkStream.Read(ReadBuffer,0,ReadBuffer.Length);
   }
   catch
   {
    errmsg="网络连接错误";
    return "false";
   }

   if (StreamSize==0)
   {
    return Returnvalue ;
   }
   else
   {
    Returnvalue = Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
    logs+=Returnvalue+this.CRLF;
    return Returnvalue;
   }
  }

  /// <summary>
  /// 与服务器交互,发送一条命令并接收回应。
  /// </summary>
  /// <param name="str">一个要发送的命令</param>
  /// <param name="errstr">如果错误,要反馈的信息</param>
  private bool Dialog(string str,string errstr)
  {
   if(str==null||str.Trim()==string.Empty)
   {
    return true;
   }
   if(SendCommand(str))
   {
    string RR=RecvResponse();
    if(RR=="false")
    {
     return false;
    }
    //检查返回的代码,根据[RFC 821]返回代码为3位数字代码如220
    string RRCode=RR.Substring(0,3);
    if(RightCodeHT[RRCode]!=null)
    {
     return true;
    }
    else
    {
     if(ErrCodeHT[RRCode]!=null)
     {
      errmsg+=(RRCode+ErrCodeHT[RRCode].ToString());
      errmsg+=CRLF;
     }
     else
     {
      errmsg+=RR;
     }
     errmsg+=errstr;
     return false;
    }
   }
   else
   {
    return false;
   }
  }


  /// <summary>
  /// 与服务器交互,发送一组命令并接收回应。
  /// </summary>

  private bool Dialog(string[] str,string errstr)
  {
   for(int i=0;i<str.Length;i++)
   {
    if(!Dialog(str[i],""))
    {
     errmsg+=CRLF;
     errmsg+=errstr;
     return false;
    }
   }

   return true;
  }


  //连接服务器
  private bool Connect(string smtpServer,int port)
  {
   //创建Tcp连接
   try
   {
    tcpClient=new TcpClient(smtpServer,port);
   }
   catch(Exception e)
   {
    errmsg=e.ToString();
    return false;
   }  
   networkStream=tcpClient.GetStream();

   //验证网络连接是否正确
   if(RightCodeHT[RecvResponse().Substring(0,3)]==null)
   {
    errmsg="网络连接失败";
    return false;
   }
   return true;
  }

  private string GetPriorityString(MailPriority mailPriority)
  {
   string priority="Normal";
   if (mailPriority==MailPriority.Low)
   {
    priority="Low";
   }
   else if (mailPriority==MailPriority.High)
   {
    priority="High";
   }
   return priority;
  }

  /// <summary>
  /// 发送电子邮件,SMTP服务器不需要身份验证
  /// </summary>
  /// <param name="smtpServer"></param>
  /// <param name="port"></param>
  /// <param name="mailMessage"></param>
  /// <returns></returns>
  public  bool SendEmail(string smtpServer,int port,MailMessage mailMessage)
  {
   return SendEmail(smtpServer,port,false,"","",mailMessage);
  }

  /// <summary>
  /// 发送电子邮件,SMTP服务器需要身份验证
  /// </summary>
  /// <param name="smtpServer"></param>
  /// <param name="port"></param>
  /// <param name="username"></param>
  /// <param name="password"></param>
  /// <param name="mailMessage"></param>
  /// <returns></returns>
  public bool SendEmail(string smtpServer,int port,string username,string password,MailMessage mailMessage)
  {
   return SendEmail(smtpServer,port,false,username,password,mailMessage);
  }

  private  bool SendEmail(string smtpServer,int port,bool ESmtp,string username,string password,MailMessage mailMessage)
  {
   if (Connect(smtpServer,port)==false)//测试连接服务器是否成功
    return false;

   string priority=GetPriorityString(mailMessage.Priority);
   bool Html=(mailMessage.BodyFormat==MailFormat.HTML);
  
   string[] SendBuffer;
   string SendBufferstr;

   //进行SMTP验证,现在大部分SMTP服务器都要认证
   if(ESmtp)
   {
    SendBuffer=new String[4];
    SendBuffer[0]="EHLO " + smtpServer + CRLF;
    SendBuffer[1]="AUTH LOGIN" + CRLF;
    SendBuffer[2]=Base64Encode(username) + CRLF;
    SendBuffer[3]=Base64Encode(password) + CRLF;
    if(!Dialog(SendBuffer,"SMTP服务器验证失败,请核对用户名和密码。"))
     return false;
   }
   else
   {//不需要身份认证
    SendBufferstr="HELO " + smtpServer + CRLF;
    if(!Dialog(SendBufferstr,""))
     return false;
   }

   //发件人地址
   SendBufferstr="MAIL FROM:<" + mailMessage.From + ">" + CRLF;
   if(!Dialog(SendBufferstr,"发件人地址错误,或不能为空"))
    return false;

   //收件人地址
   SendBuffer=new string[mailMessage.Recipients.Count];
   for(int i=0;i<mailMessage.Recipients.Count;i++)
   {
    SendBuffer[i]="RCPT TO:<" +(string)mailMessage.Recipients[i] +">" + CRLF;
   }
   if(!Dialog(SendBuffer,"收件人地址有误"))
    return false;

   /*
     SendBuffer=new string[10];
     for(int i=0;i<RecipientBCC.Count;i++)
     {

   SendBuffer[i]="RCPT TO:<" + RecipientBCC[i].ToString() +">" + CRLF;

     }

     if(!Dialog(SendBuffer,"密件收件人地址有误"))
   return false;
   */

   SendBufferstr="DATA" + CRLF;
   if(!Dialog(SendBufferstr,""))
    return false;

   //发件人姓名
   SendBufferstr="From:" + mailMessage.FromName + "<" +mailMessage.From +">" +CRLF;

   //if(ReplyTo.Trim()!="")
   //{
   // SendBufferstr+="Reply-To: " + ReplyTo + CRLF;
   //}

   //SendBufferstr+="To:" + ToName + "<" + Recipient[0] +">" +CRLF;
   //至少要有一个收件人
   if (mailMessage.Recipients.Count==0)
   {
    return false;
   }
   else
   {
    SendBufferstr += "To:=?"+mailMessage.Charset.ToUpper()+"?B?"+
     Base64Encode((string)mailMessage.Recipients[0])+"?="+"<"+(string)mailMessage.Recipients[0]+">"+CRLF;
   }
 
   //SendBufferstr+="CC:";
   //for(int i=0;i<Recipient.Count;i++)
   //{
   // SendBufferstr+=Recipient[i].ToString() + "<" + Recipient[i].ToString() +">,";
   //}
   //SendBufferstr+=CRLF;

   SendBufferstr+=
    ((mailMessage.Subject==String.Empty || mailMessage.Subject==null)?"Subject:":((mailMessage.Charset=="")?("Subject:" +
    mailMessage.Subject):("Subject:" + "=?" + mailMessage.Charset.ToUpper() + "?B?" +
    Base64Encode(mailMessage.Subject) +"?="))) + CRLF;
   SendBufferstr+="X-Priority:" + priority + CRLF;
   SendBufferstr+="X-MSMail-Priority:" + priority + CRLF;
   SendBufferstr+="Importance:" + priority + CRLF;
   SendBufferstr+="X-Mailer: Lion.Web.Mail.SmtpMail Pubclass [cn]" + CRLF;
   SendBufferstr+="MIME-Version: 1.0" + CRLF;
   if(mailMessage.Attachments.Count!=0)
   {
    SendBufferstr+="Content-Type: multipart/mixed;" + CRLF;
    SendBufferstr += " boundary=\"====="+
     (Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"=====\""+CRLF+CRLF;
   }

   if(Html)
   {
    if(mailMessage.Attachments.Count==0)
    {
     SendBufferstr += "Content-Type: multipart/alternative;"+CRLF;//内容格式和分隔符
     SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+CRLF+CRLF;
     SendBufferstr += "This is a multi-part message in MIME format."+CRLF+CRLF;
    }
    else
    {
     SendBufferstr +="This is a multi-part message in MIME format."+CRLF+CRLF;
     SendBufferstr += "--=====001_Dragon520636771063_====="+CRLF;
     SendBufferstr += "Content-Type: multipart/alternative;"+CRLF;//内容格式和分隔符
     SendBufferstr += " boundary=\"=====003_Dragon520636771063_=====\""+CRLF+CRLF;
    }
    SendBufferstr += "--=====003_Dragon520636771063_====="+CRLF;
    SendBufferstr += "Content-Type: text/plain;"+ CRLF;
    SendBufferstr += ((mailMessage.Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +

     mailMessage.Charset.ToLower() + "\"")) + CRLF;
    SendBufferstr+="Content-Transfer-Encoding: base64" + CRLF + CRLF;
    SendBufferstr+= Base64Encode("邮件内容为HTML格式,请选择HTML方式查看") + CRLF + CRLF;

    SendBufferstr += "--=====003_Dragon520636771063_====="+CRLF;


    SendBufferstr+="Content-Type: text/html;" + CRLF;
    SendBufferstr+=((mailMessage.Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
     mailMessage.Charset.ToLower() + "\"")) + CRLF;
    SendBufferstr+="Content-Transfer-Encoding: base64" + CRLF + CRLF;
    SendBufferstr+= Base64Encode(mailMessage.Body) + CRLF + CRLF;
    SendBufferstr += "--=====003_Dragon520636771063_=====--"+CRLF;
   }
   else
   {
    if(mailMessage.Attachments.Count!=0)
    {
     SendBufferstr += "--=====001_Dragon303406132050_====="+CRLF;
    }
    SendBufferstr+="Content-Type: text/plain;" + CRLF;
    SendBufferstr+=((mailMessage.Charset=="")?(" charset=\"iso-8859-1\""):(" charset=\"" +
     mailMessage.Charset.ToLower() + "\"")) + CRLF;
    SendBufferstr+="Content-Transfer-Encoding: base64" + CRLF + CRLF;
    SendBufferstr+= Base64Encode(mailMessage.Body) + CRLF;
   }
 
   //SendBufferstr += "Content-Transfer-Encoding: base64"+CRLF;

    if(mailMessage.Attachments.Count!=0)
   {
    for(int i=0;i<mailMessage.Attachments.Count;i++)
    {
     string filepath = (string)mailMessage.Attachments[i];
     SendBufferstr += "--====="+
      (Html?"001_Dragon520636771063_":"001_Dragon303406132050_") +"====="+CRLF;
     //SendBufferstr += "Content-Type: application/octet-stream"+CRLF;
     SendBufferstr += "Content-Type: text/plain;"+CRLF;
     SendBufferstr += " name=\"=?"+mailMessage.Charset.ToUpper()+"?B?"+
      Base64Encode(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+CRLF;
     SendBufferstr += "Content-Transfer-Encoding: base64"+CRLF;
     SendBufferstr += "Content-Disposition: attachment;"+CRLF;
     SendBufferstr += " filename=\"=?"+mailMessage.Charset.ToUpper()+"?B?"+
      Base64Encode(filepath.Substring(filepath.LastIndexOf("\\")+1))+"?=\""+CRLF+CRLF;
     SendBufferstr += GetStream(filepath)+CRLF+CRLF;
    }
    SendBufferstr += "--====="+
     (Html?"001_Dragon520636771063_":"001_Dragon303406132050_")+"=====--"+CRLF+CRLF;
   }
 
   SendBufferstr += CRLF + "." + CRLF;//内容结束

   if(!Dialog(SendBufferstr,"错误信件信息"))
    return false;

   SendBufferstr="QUIT" + CRLF;
   if(!Dialog(SendBufferstr,"断开连接时错误"))
    return false;

   networkStream.Close();
   tcpClient.Close();
   return true;
  }
 }

 

 public class SmtpMail
 {
  private static string _SmtpServer;

  /// <summary>
  /// 格式:SmtpAccount:Password@SmtpServerAddress<br>
  /// 或者:SmtpServerAddress<br>
  /// <code>
  /// SmtpMail.SmtpServer="user:12345678@smtp.126.com";
  /// //或者:
  /// SmtpMail.SmtpServer="smtp.126.com";
  /// 或者:
  /// SmtpMail.SmtpServer=SmtpServerHelper.GetSmtpServer("user","12345678","smtp.126.com");
  /// </code>
  /// </summary>
  public static string SmtpServer
  {
   set { _SmtpServer=value;}
   get { return _SmtpServer;}
  }

  public static bool Send(MailMessage mailMessage,string username,string password)
  {
   SmtpServerHelper helper=new SmtpServerHelper();
   return helper.SendEmail(_SmtpServer,25,username,password,mailMessage);
  }

 }

 #endregion
}

 


using System;
using NUnit.Framework;


namespace SkyDev.Web.Mail
{
 /// <summary>
 /// Test 的摘要说明。
 /// </summary>
 [TestFixture]
 public class TestSmtpMail
 {
  //安装测试用例,完成初始化操作
  [SetUp]
  public void SetUp()
  {  
  }

  //测试结束完成清理操作
  [TearDown]  
  public void TearDown()
  {
 
  }
 
      [Test]
  public void TestMailAttachments()
  {
   SkyDev.Web.Mail.MailAttachments attachments=new MailAttachments();
   Assert.AreEqual(0,attachments.Count,"初始化MailAttachments");
   attachments.Add("c:\\autoexec.bat");
   Assert.AreEqual(1,attachments.Count,"增加附件(附件确实存在)");
   attachments.Add("c:\\autoexec.dat.txt");
   Assert.AreEqual(1,attachments.Count,"增加附件(附件不存在)");
   attachments.Clear();
   Assert.AreEqual(0,attachments.Count,"清除附件");
  }

  [Test]
  public void TestMailMessage()
  {
   MailMessage message=new MailMessage();  
   Assert.AreEqual(0,message.Attachments.Count,"初始化MailAttachments");
   Assert.AreEqual(MailFormat.Text,message.BodyFormat,"邮件格式");
   Assert.AreEqual("GB2312",message.Charset,"缺省的字符集");
  }

  [Test]
  public void TestSendMail()
  {
   SmtpMail.SmtpServer="smtp.126.com";
   MailMessage mail=new MailMessage();
   mail.From="qs1976@126.com";
   mail.FromName="曾青松";
   mail.AddRecipients("qs1976@126.com");
   mail.Subject="主题:测试邮件";
   mail.BodyFormat=MailFormat.Text;
   mail.Body="测试的内容.";
   mail.Attachments.Add("c:\\test.txt");
   SmtpMail.Send(mail,"","");//请填写自己的测试邮件帐号
  }
 }
}

上一篇:使用Web服务将C#代码转换为VB.NET代码 人气:13140
下一篇:C#实现大文件分块发送到客户端 人气:12967
浏览全部C#的内容 Dreamweaver插件下载 网页广告代码 2009年新年快乐
  最新网站源码 最新软件下载
2009-1-8 SMF论坛Simple Machines Forum v
2009-1-8 SMF论坛Simple Machines Forum v
2009-1-8 深度学习(asp)拼图游戏 v0.2.3
2009-1-8 纵横B2B电子商务系统XYECS!B2B v
2009-1-8 马克斯CMS v2.0 bulid 090105 be
2009-1-8 淘宝妈妈_淘客推广系统 v1.0
2009-1-8 淄博某企业网站源码
2009-1-8 silverlight制作的手机功能演示
2009-1-8 大型WEB束鹿三国游戏 特别版
2009-1-7 汉字任意点阵字库制作软件 V2.6
2009-1-7 书法家毛笔字生成器 Ougishi V4.
2009-1-7 字体修复大师
2009-1-7 微雨字体效果浏览器 1.0
2009-1-7 字体试衣间 2.9.6.8 豪华版
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
  发表评论
姓 名: 验证码: [ 查看评论 ]
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 公积金贷款计算 | 购房银行按揭利率计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 全国各地车牌查询 | 全国车辆交通违章查询 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成