国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#實現SMTP服務器,使用TCP命令實現,功能比較完善

2019-11-18 19:31: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,"","");//請填寫自己的測試郵件帳號
  }
 }
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉尔市| 怀仁县| 古田县| 定结县| 广德县| 鹤山市| 高邑县| 陵川县| 炎陵县| 民权县| 贡嘎县| 连平县| 天台县| 屏东市| 四会市| 乌兰县| 绵竹市| 木兰县| 江川县| 河间市| 霍州市| 海安县| 通渭县| 台湾省| 郑州市| 香格里拉县| 堆龙德庆县| 光山县| 安乡县| 三明市| 望奎县| 密山市| 牟定县| 浏阳市| 嘉祥县| 正安县| 古交市| 贞丰县| 灌阳县| 屏东县| 富宁县|