//接続 public bool Connect() { if (Status != SmtpClientStatus.Idle) { SetLastError("Connect() Status != Idle"); return(false); } if (_ip.InetKind == InetKind.V4) { _sockTcp = Inet.Connect(new Kernel(), _ip, _port, _sec + 3, null); } else { _sockTcp = Inet.Connect(new Kernel(), _ip, _port, _sec + 3, null); } if (_sockTcp.SockState == SockState.Connect) { //220受信 if (!RecvStatus(220)) { return(false); } Status = SmtpClientStatus.Helo; return(true); } SetLastError("Faild in SmtpClient Connect()"); return(false); }
//接続確認 void ConfirmConnect() { //既に切断されている場合 if (_sockTcp.SockState != SockState.Connect) { Status = SmtpClientStatus.Idle; } }
public SmtpClient(Ip ip, int port, int sec, ILife iLife) { _ip = ip; _port = port; _sec = sec; _iLife = iLife; Status = SmtpClientStatus.Idle; }
public bool Helo() { //切断中の場合はエラー if (Status != SmtpClientStatus.Helo) { SetLastError("Helo() Status != Helo"); return(false); } //HELO送信 if (!SendCmd(String.Format("HELO 1"))) { return(false); } //250受信 if (!RecvStatus(250)) { return(false); } Status = SmtpClientStatus.Transaction; return(true); }
public bool Rcpt(String mailAddress) { //トランザクションでない場合エラー if (Status != SmtpClientStatus.Transaction) { SetLastError("Rcpt() Status != Transaction"); return(false); } //RCPT送信 if (!SendCmd(String.Format("RCPT TO: {0}", mailAddress))) { return(false); } //250受信 if (!RecvStatus(250)) { return(false); } Status = SmtpClientStatus.Transaction; return(true); }
public bool Quit() { //トランザクションでない場合エラー if (Status == SmtpClientStatus.Idle) { SetLastError("Quit() Status == Idle"); return(false); } //QUIT送信 if (!SendCmd("QUIT")) { return(false); } //221受信 if (!RecvStatus(221)) { return(false); } //切断 _sockTcp.Close(); _sockTcp = null; Status = SmtpClientStatus.Idle; return(true); }
public bool Auth(SmtpClientAuthKind kind,String user, String pass) { //トランザクションでない場合エラー if (Status != SmtpClientStatus.Transaction) { SetLastError("Auth() Status != Transaction"); return false; } //AUTH送信 var authStr=""; switch (kind){ case SmtpClientAuthKind.Login: authStr = "AUTH LOGIN"; break; case SmtpClientAuthKind.Plain: authStr = "AUTH PLAIN"; break; case SmtpClientAuthKind.CramMd5: authStr = "AUTH CRAM-MD5"; break; } if (!SendCmd(authStr)){ return false; } //334受信 if (!RecvStatus(334)){ return false; } //ユーザ・パスワード送信 switch (kind){ case SmtpClientAuthKind.Plain: //ユーザ名送信 var str = String.Format("{0}\0{1}\0{2}", user, user, pass); if (!SendCmd(String.Format(Base64.Encode(str)))) { return false; } break; case SmtpClientAuthKind.Login: //ユーザ名送信 if (!SendCmd(String.Format(Base64.Encode(user)))) { return false; } //334受信 if (!RecvStatus(334)) { return false; } //パスワード送信 if (!SendCmd(String.Format(Base64.Encode(pass)))) { return false; } break; case SmtpClientAuthKind.CramMd5: //MD5送信 var timestamp = _recvStr.Split(' ')[1]; var s = string.Format("{0} {1}", user, Md5.Hash(pass, Base64.Decode(timestamp))); if (!SendCmd(Base64.Encode(s))) { return false; } break; } //235受信 if (!RecvStatus(235)) { return false; } Status = SmtpClientStatus.Transaction; return true; }
public bool Rcpt(String mailAddress) { //トランザクションでない場合エラー if (Status != SmtpClientStatus.Transaction) { SetLastError("Rcpt() Status != Transaction"); return false; } //RCPT送信 if (!SendCmd(String.Format("RCPT TO: {0}", mailAddress))) { return false; } //250受信 if (!RecvStatus(250)) { return false; } Status = SmtpClientStatus.Transaction; return true; }
public bool Quit() { //トランザクションでない場合エラー if (Status == SmtpClientStatus.Idle) { SetLastError("Quit() Status == Idle"); return false; } //QUIT送信 if (!SendCmd("QUIT")) { return false; } //221受信 if (!RecvStatus(221)) { return false; } //切断 _sockTcp.Close(); _sockTcp = null; Status = SmtpClientStatus.Idle; return true; }
public bool Helo() { //切断中の場合はエラー if (Status != SmtpClientStatus.Helo) { SetLastError("Helo() Status != Helo"); return false; } //HELO送信 if (!SendCmd(String.Format("HELO 1"))) { return false; } //250受信 if (!RecvStatus(250)) { return false; } Status = SmtpClientStatus.Transaction; return true; }
//接続 public bool Connect() { if (Status != SmtpClientStatus.Idle) { SetLastError("Connect() Status != Idle"); return false; } if (_ip.InetKind == InetKind.V4) { _sockTcp = Inet.Connect(new Kernel(), _ip, _port, _sec + 3, null); } else { _sockTcp = Inet.Connect(new Kernel(), _ip, _port, _sec + 3, null); } if (_sockTcp.SockState == SockState.Connect) { //220受信 if (!RecvStatus(220)) { return false; } Status = SmtpClientStatus.Helo; return true; } SetLastError("Faild in SmtpClient Connect()"); return false; }
public bool Auth(SmtpClientAuthKind kind, String user, String pass) { //トランザクションでない場合エラー if (Status != SmtpClientStatus.Transaction) { SetLastError("Auth() Status != Transaction"); return(false); } //AUTH送信 var authStr = ""; switch (kind) { case SmtpClientAuthKind.Login: authStr = "AUTH LOGIN"; break; case SmtpClientAuthKind.Plain: authStr = "AUTH PLAIN"; break; case SmtpClientAuthKind.CramMd5: authStr = "AUTH CRAM-MD5"; break; } if (!SendCmd(authStr)) { return(false); } //334受信 if (!RecvStatus(334)) { return(false); } //ユーザ・パスワード送信 switch (kind) { case SmtpClientAuthKind.Plain: //ユーザ名送信 var str = String.Format("{0}\0{1}\0{2}", user, user, pass); if (!SendCmd(String.Format(Base64.Encode(str)))) { return(false); } break; case SmtpClientAuthKind.Login: //ユーザ名送信 if (!SendCmd(String.Format(Base64.Encode(user)))) { return(false); } //334受信 if (!RecvStatus(334)) { return(false); } //パスワード送信 if (!SendCmd(String.Format(Base64.Encode(pass)))) { return(false); } break; case SmtpClientAuthKind.CramMd5: //MD5送信 var timestamp = _recvStr.Split(' ')[1]; var s = string.Format("{0} {1}", user, Md5.Hash(pass, Base64.Decode(timestamp))); if (!SendCmd(Base64.Encode(s))) { return(false); } break; } //235受信 if (!RecvStatus(235)) { return(false); } Status = SmtpClientStatus.Transaction; return(true); }