📄 form4.cs
字号:
}
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 + -