//***************************************************************** //错误的状态码 //***************************************************************** errorCodes.Add("421","服务未就绪,关闭传输通道"); errorCodes.Add("432","需要一个密码转换"); errorCodes.Add("450","要求的邮件操作未完成,邮箱不可用(如:邮箱忙)"); errorCodes.Add("451","放弃要求的操作,要求的操作未执行"); errorCodes.Add("452","系统存储不足,要求的操作未完成"); errorCodes.Add("454","临时的认证失败"); errorCodes.Add("500","邮箱地址错误"); errorCodes.Add("501","参数格式错误"); errorCodes.Add("502","命令不可实现"); errorCodes.Add("503","命令的次序不正确"); errorCodes.Add("504","命令参数不可实现"); errorCodes.Add("530","需要认证"); errorCodes.Add("534","认证机制过于简单"); errorCodes.Add("538","当前请求的认证机制需要加密"); errorCodes.Add("550","当前的邮件操作未完成,邮箱不可用(如:邮箱未找到或邮箱不能用)"); errorCodes.Add("551","用户非本地,请尝试<forward-path>"); errorCodes.Add("552","过量的存储分配,制定的操作未完成"); errorCodes.Add("553","邮箱名不可用,如:邮箱地址的格式错误"); errorCodes.Add("554","传送失败"); errorCodes.Add("535","用户身份验证失败"); //**************************************************************** //操作执行成功后的状态码 //**************************************************************** rightCodes.Add("220","服务就绪"); rightCodes.Add("221","服务关闭传输通道"); rightCodes.Add("235","验证成功"); rightCodes.Add("250","要求的邮件操作完成"); rightCodes.Add("251","非本地用户,将转发向<forward-path>"); rightCodes.Add("334","服务器响应验证Base64字符串"); rightCodes.Add("354","开始邮件输入,以<CRLF>.<CRLF>结束"); //读取系统回应 StreamReader reader=new StreamReader(ns); logs+=reader.ReadLine()+CRLF; } /// <summary> /// 向SMTP发送命令 /// </summary> /// <param name="cmd"></param> private string sendCommand(string cmd,bool isMailData) { if(cmd!=null && cmd.Trim()!=string.Empty) { byte[] cmd_b=null; if(!isMailData)//不是邮件数据 cmd+=CRLF;
logs+=cmd; //开始写入邮件数据 if(!isMailData) { cmd_b=Encoding.ASCII.GetBytes(cmd); ns.Write(cmd_b,0,cmd_b.Length); } else { cmd_b=Encoding.GetEncoding(this.mailEncodingName).GetBytes(cmd); ns.BeginWrite(cmd_b,0,cmd_b.Length,new AsyncCallback(this.asyncCallBack),null); } //读取服务器响应 StreamReader reader=new StreamReader(ns); string response=reader.ReadLine(); logs+=response+CRLF; //检查状态码 string statusCode=response.Substring(0,3); bool isExist=false; bool isRightCode=true; foreach(string err in this.errorCodes.Keys) { if(statusCode==err) { isExist=true; isRightCode=false; break; } } foreach(string right in this.rightCodes.Keys) { if(statusCode==right) { isExist=true; break; } } //根据状态码来处理下一步的动作 if(!isExist) //不是合法的SMTP主机 { this.setError("不是合法的SMTP主机,或服务器拒绝服务"); } else if(!isRightCode)//命令没能成功执行 { this.setError(statusCode+":"+this.errorCodes[statusCode]); } else //命令成功执行 { this.errorMessage=""; } |