⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form4.cs

📁 C#写的Email邮件客户端程序skyemail.
💻 CS
📖 第 1 页 / 共 3 页
字号:
}
	public class Sendmail
	{
		public string Cto;//收件人
		public string Csubject;//主题
		public string Ccon;//正文
		public enum connect_state {disc,AUTHORIZATION,TRANSACTION,UPDATE};
		public bool error;
		public connect_state state=connect_state.disc ;
		private string CRLF = "\r\n";  
		private TcpClient Server;
		public NetworkStream NetStrm;
		public StreamReader  RdStrm;
		private string Data;
		private byte[] szData;


		public Sendmail()
		{
			Cto=Cto;
			Csubject=Csubject;
			Ccon=Ccon;
		}	
        #region NetStream 
		public string connect(string smtpserver)
		{
			Server = new TcpClient(smtpserver,25);                                
			try
			{
				NetStrm = Server.GetStream();
				RdStrm= new StreamReader(Server.GetStream());
				state=connect_state.AUTHORIZATION ;
				return(RdStrm.ReadLine ());
			}            
			catch(InvalidOperationException err)
			{
				return("Error: "+err.ToString());
			}

		}
		private string disconnect ()
		{
			string temp="disconnected successfully.";
			if(state !=connect_state.disc)
			{
				NetStrm.Close();
				RdStrm.Close();
				state=connect_state.disc ;
			}
			else
			{
				temp="Not Connected.";
			}
			return(temp);
		}

		private void issue_command(string command)
		{
			Data= command + CRLF;
			szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
			NetStrm.Write(szData,0,szData.Length);
		}

		private string read_single_line_response()
		{
			string temp;
			try
			{
				temp = RdStrm.ReadLine();
				was_pop_error(temp);                
				return(temp);
			}
			catch(InvalidOperationException err)
			{
				return("Error in read_single_line_response(): " + err.ToString ()) ;
			}

		}
		private string read_multi_line_response()
		{
			string temp="";
			string szTemp;
			try
			{
				szTemp = RdStrm.ReadLine();
				was_pop_error(szTemp);                
				if(!error) 
				{
					while(szTemp!=".")
					{
						temp += szTemp+CRLF;
						szTemp = RdStrm.ReadLine();
					}
				}
				else
				{
					temp=szTemp;
				}
				return(temp);
			}
			catch(InvalidOperationException err)
			{
				return("Error in read_multi_line_response(): " + err.ToString ());
			}
		}
		private void was_pop_error(string response)
		{
			//detect if the pop server that issued the response believes that
			//an error has occured.

			if(response.StartsWith ("5"))
			{
				error=true;
			}
			else
			{	
				//success
				error=false;
				
			}
		}
        #endregion
        #region SMTP commands
		public string NOOP()
		{
			string temp;
			if (state != connect_state.TRANSACTION )
			{
				//the pop command NOOP is only valid in the TRANSACTION state
				temp="Connection state not = TRANSACTION";
			}
			else
			{
				issue_command ("NOOP");
				temp=read_single_line_response();

			}
			return(temp);

		}
		public string HELO(string Madd)
		{
			string temp;
			if (state != connect_state.AUTHORIZATION) 
			{
				//the pop command PASS is only valid in the AUTHORIZATION state
				temp="Connection state not = AUTHORIZATION";
			}
			else
			{
				if (Madd !=null)
				{
					issue_command ("HELO " + Madd);
					temp=read_single_line_response();

					if (!error)
					{
						//transition to the Transaction state
						//state=connect_state.TRANSACTION;
					}
				}
				else
				{
					temp="No Users.";
				}
			}
			return(temp);
		}
		
		public string QUIT()
		{
			//QUIT is valid in all pop states

			string temp;
			if (state !=connect_state.disc)
			{
				issue_command ("QUIT");
				temp=read_single_line_response();
				temp += CRLF + disconnect();
    
			}
			else
			{
				temp="Not Connected.";
			}
			return(temp);

		}
		public string FROM (string emailaddress)
		{
			string temp="";
			if (state == connect_state.TRANSACTION )
			{
				//the pop command RETR is only valid in the TRANSACTION state
				temp="Connection state not = TRANSACTION";
			}
			else
			{
				// retrieve mail with number mail parameter
				issue_command ("MAIL from:<"+emailaddress+">");
				temp=read_single_line_response();
			}
			return(temp);

		}

		public string RSET()
		{
			string temp;
			if (state != connect_state.TRANSACTION )
			{
				//the pop command STAT is only valid in the TRANSACTION state
				temp="Connection state not = TRANSACTION";
			}
			else
			{
				issue_command("RSET");
				temp=read_single_line_response();
			}
			return(temp);

		}

		public string RCPT(string Mto)
		{
			string temp;
			if (state!=connect_state.TRANSACTION)
			{
				issue_command("rcpt to:<" + Mto+">");
				temp=read_single_line_response();

				return(temp);
			}
			else

			{
				//the pop command STAT is only valid in the TRANSACTION state
				return ("Connection state not = TRANSACTION");
			}
		} 
		public string USER(string user)
		{
			string temp;
			if (state!=connect_state.TRANSACTION)
			{
				byte[] barray;
				barray=Encoding.Default.GetBytes(user);
				user= Convert.ToBase64String(barray);
				issue_command(user);
				temp=read_single_line_response();
				return(temp);
			}
			else
			{
				//the pop command STAT is only valid in the TRANSACTION state
				return ("Connection state not = TRANSACTION");
			}
		} 
		public string PASSWORD(string pwd)
		{
			string temp;
			if (state!=connect_state.TRANSACTION)
			{
				byte[] barray;
				barray=Encoding.Default.GetBytes(pwd);
				pwd= Convert.ToBase64String(barray);
				issue_command(pwd);
				temp=read_single_line_response();
				return(temp);
			}
			else
			{
				return ("Connection state not = TRANSACTION");
			}
		} 
		public string EHLO(string smtpserver)
		{
			string temp;
			if (state!=connect_state.TRANSACTION)
			{
				issue_command("EHLO " +smtpserver );
				temp=read_single_line_response();

				return(temp);
			}
			else

			{
				//the pop command STAT is only valid in the TRANSACTION state
				return ("Connection state not = TRANSACTION");
			}
		}        
		public string AUTH()
		{
			string temp;
			if (state!=connect_state.TRANSACTION)
			{
				issue_command("AUTH LOGIN");
				temp=read_single_line_response();

				return(temp);
			}
			else

			{
				//the pop command STAT is only valid in the TRANSACTION state
				return ("Connection state not = TRANSACTION");
			}
		}        
		public string DATA(string Mcon,string sflag)
		{
			string temp="";
			if (state != connect_state.AUTHORIZATION) 
			{
				//the pop command USER is only valid in the AUTHORIZATION state
				temp="Connection state not = AUTHORIZATION";
			}
			else
			{
				if (Mcon !=null)
				{   
					issue_command("DATA");
					temp=read_single_line_response();
					issue_command(Mcon);
					if(sflag.ToLower().Equals("true"))
					{
						temp=read_single_line_response();
					}
					issue_command(".");
					temp=read_single_line_response();
					
					if (temp.StartsWith ("2"))//发送成功将数据写入已发邮件中
					{
						FileInfo dd=new FileInfo("sent.wg");
						Encoding tmpEncoding = Encoding.ASCII;
						byte[] bytes=Encoding.Default.GetBytes(Mcon);///字符转换成字符流
						if (dd.Exists)
						{
							StreamWriter sw =new StreamWriter(@"sent.wg",true,Encoding.GetEncoding("gb2312")) ;
							sw.Write(Mcon); 
							sw.Close(); 
						}
						else
						{
							FileStream  emailstr =File.Create("sent.wg");//打开文件
							for(int i=0;i<bytes.Length;i++)
							{
								emailstr.WriteByte(bytes[i]);
							}
							emailstr.Close();
						}
						MessageBox.Show ("邮件发送成功!");
					}
					else//发送不成功则将数据写入发件箱中
					{
						FileInfo dd=new FileInfo("out.wg");
						Encoding tmpEncoding = Encoding.ASCII;
						byte[] bytes=Encoding.Default.GetBytes(Mcon);///字符转换成字符流
						if (dd.Exists)
						{
							StreamWriter sw =new StreamWriter(@"out.wg",true,Encoding.GetEncoding("gb2312") ) ;
							sw.Write(Mcon); 
							sw.Close(); 
						}
						else
						{
							FileStream  emailstr =File.Create("out.wg");//打开文件
							for(int i=0;i<bytes.Length;i++)
							{
								emailstr.WriteByte(bytes[i]);
							}
							emailstr.Close();
						}
						MessageBox.Show ("邮件发送没有成功!请重新发送");
					}//匹配发送是否成功

			}//匹配内容是否为空
		}

			return(temp);
		}
		#endregion

	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -