亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合网hezyo| 91九色单男在线观看| 日韩一级黄色av| 久久久国产精品一区| 26uuu另类亚洲欧美日本一| 在线亚洲午夜片av大片| 亚洲一区制服诱惑| 日韩免费不卡av| 国产一区二区三区直播精品电影| 蜜臀久久99精品久久久久久宅男| 成人在线小视频| 黄色精品在线看| 夜夜嗨av一区二区三区免费区| 97视频在线观看免费高清完整版在线观看| 成人在线精品视频| 欧美视频国产精品| 4438全国亚洲精品在线观看视频| 国产美女久久精品| 精品日本高清在线播放| 欧美成人第一页| 久久亚洲精品国产亚洲老地址| 久久久久亚洲精品国产| 92版电视剧仙鹤神针在线观看| 国内精品美女av在线播放| 性色av一区二区三区在线观看| 日韩中文有码在线视频| 亚洲欧美国产制服动漫| 欧美黑人一级爽快片淫片高清| 色婷婷亚洲mv天堂mv在影片| 日韩欧美在线视频观看| 亚洲免费视频网站| 久久久精品网站| 国产性猛交xxxx免费看久久| 亚洲欧美中文另类| 国产成人亚洲综合91| 欧美激情一区二区三区高清视频| 色噜噜亚洲精品中文字幕| 亚洲www永久成人夜色| 亚洲天堂成人在线视频| 欧美丰满老妇厨房牲生活| 在线观看91久久久久久| 91精品国产91久久久久久不卡| 91亚洲午夜在线| 久久精品视频va| 91精品成人久久| 欧美激情极品视频| 在线观看欧美视频| 26uuu亚洲国产精品| 一道本无吗dⅴd在线播放一区| 亚洲网在线观看| 精品亚洲精品福利线在观看| 中文字幕在线看视频国产欧美在线看完整| 91免费版网站入口| 国产日韩精品在线播放| 91九色视频在线| 国产一区二区成人| 国产精品色悠悠| 91免费电影网站| 欧美性猛交xxxx乱大交| 亚洲最大的成人网| 国产久一一精品| 欧美精品久久久久a| 国产精品一区二区av影院萌芽| 国产精品欧美在线| 日韩欧美在线字幕| 国产精品88a∨| 亚洲欧美日韩中文在线| 欧日韩在线观看| 国自在线精品视频| 国产精品1区2区在线观看| 色久欧美在线视频观看| 欧美激情亚洲视频| 国内自拍欧美激情| 日韩高清电影好看的电视剧电影| xvideos亚洲| 色偷偷av一区二区三区乱| 日韩精品亚洲元码| 成人福利视频网| 久久久久久久999| 美女少妇精品视频| 欧美亚洲在线观看| 国产成人在线一区二区| 中文字幕日韩在线观看| 亚洲黄页网在线观看| 国产欧美日韩免费看aⅴ视频| 久久精品国产亚洲一区二区| 深夜福利国产精品| 国产极品jizzhd欧美| 中文字幕日韩在线播放| 久久精品成人一区二区三区| 亚洲国产成人久久综合一区| 精品国产91乱高清在线观看| 亚洲第一免费网站| 日韩av电影中文字幕| 日韩免费在线播放| 精品国产欧美一区二区三区成人| 这里精品视频免费| www.亚洲男人天堂| 亚洲成人精品久久| 992tv成人免费影院| 欧美激情亚洲一区| 国产美女主播一区| 国产精品第一区| 亚洲最新av在线网站| 欧美日韩中文在线观看| 国产精品白丝jk喷水视频一区| 97精品视频在线播放| 欧美视频中文字幕在线| 91麻豆国产语对白在线观看| 久久综合伊人77777蜜臀| 亚洲成人激情视频| 久久久亚洲网站| 久久国产精彩视频| 欧美性xxxx18| 9.1国产丝袜在线观看| 日韩在线免费视频观看| 精品偷拍一区二区三区在线看| 国产91久久婷婷一区二区| 国模精品一区二区三区色天香| 成人网页在线免费观看| 亚洲乱码av中文一区二区| 欧美精品激情视频| 亚洲网站视频福利| 91成人在线观看国产| 亚洲欧美国产另类| 欧美视频免费在线观看| 久久免费少妇高潮久久精品99| 国产婷婷97碰碰久久人人蜜臀| 欧美一级电影久久| 久久99国产精品自在自在app| 成人日韩av在线| 成人h片在线播放免费网站| 国产精品久久久久久久久久免费| 国产网站欧美日韩免费精品在线观看| 日韩欧美在线视频日韩欧美在线视频| 美日韩精品免费观看视频| 高跟丝袜欧美一区| 国产精品ⅴa在线观看h| 日韩有码在线观看| 日韩av在线天堂网| 欧美国产亚洲精品久久久8v| 91超碰中文字幕久久精品| 亚洲国产精品yw在线观看| 少妇高潮久久77777| 欧美黄色片在线观看| 96sao精品视频在线观看| 欧美伊久线香蕉线新在线| 97精品国产aⅴ7777| 精品毛片网大全| 亚洲成**性毛茸茸| 国产精品尤物福利片在线观看| 亚洲欧美国产制服动漫| 热久久视久久精品18亚洲精品| 日韩a**中文字幕| 欧美日韩国产在线看| 成人春色激情网| 欧美又大又硬又粗bbbbb| 亚洲男人av电影| 国产日韩欧美另类| 精品视频—区二区三区免费| 色妞色视频一区二区三区四区| 亚洲国产天堂网精品网站| 亚洲精品久久视频| 亚洲成色777777女色窝|