usando el sistema;
usando System.Text;
usando System.io;
usando System.net;
usando System.net.sockets;
Namespace Blood.com.classlib
{
/// <summary>
/// tcpclient 派生类 , 用来进行 smtp 服务器的连接工作
/// </summary>
clase pública SmtpClient: TCPClient
{
Public Bool IsConnected ()
{
regresar activo;
}
public void sendCommandtoserver (comando de cadena)
{
NetworkStream ns = this.getStream ();
byte [] WriteBuffer;
writeBuffer = new Byte [1024];
writeBuffer = encoding.default.getBytes (comando);
ns.write (WriteBuffer, 0, WriteBuffer.length);
devolver;
}
Cadena pública getServerResponse ()
{
int Streamsize;
cadena returnValue =;
byte [] readbuffer;
NetworkStream ns = this.getStream ();
readBuffer = new Byte [1024];
streamsize = ns.read (readbuffer, 0, readbuffer.length);
if (streamsize == 0)
{
return returnValue;
}
demás
{
returnValue = encoding.default.getString (readBuffer);
Valor de retorno;
}
}
Public bool doestringContainsMtpCode (String S, String SmtpCode)
{
return (s.indexof (smtpcode, 0,10) ==-1)? falso: true;
}
} // 结束类
/// <summary>
/// 发送邮件类
/// </summary>
clase pública smtpmail
{
/// <summary>
/// 错误反馈信息
/// </summary>
cadena privada strerrMessage = null;
/// <summary>
/// SMTP 服务器反馈的信息
/// </summary>
cadena privada strresponse;
/// <summary>
/// 构造函数
/// </summary>
Público SMTPMail ()
{
strerrMessage =;
strresponse =;
}
/// <summary>
/// 取得错误反馈信息
/// </summary>
cadena pública Errormessage
{
conseguir
{
return strerrMessage;
}
}
/// <summary>
/// 取得 SMTP 服务器反馈的信息
/// </summary>
cadena pública ServerResponse
{
conseguir
{
devolver strresponse;
}
}
/// <summary>
/// 邮件发送优先级
/// </summary>
Prioridades públicas enum
{
/// <summary>
/// 最高级别
/// </summary>
alto = 1,
/// <summary>
/// 默认级别
/// </summary>
Normal = 3,
/// <summary>
/// 最低级别
/// </summary>
bajo = 5
}
public void sendmail (string smtphost, int puerto, cadena desde, cadena DisplayFromName, String to, String DisplayToname, Priority Priority, Bool Html, String Base, String Sujeto, Mensaje de cadena)
{
intentar
{
cadena strresponsenumber;
SmtpClient Smtpcmail = new SmtpClient ();
smtpcmail.connect (smtphost, puerto);
bool bolconnect = smtpcmail.isconnected ();
// 判断是否进行了连接
if (! Bolconnect)
{
strerrMessage = smtp 服务器连接失败 ...;
devolver;
}
// 读取反馈信息
stresponsenumber = smtpcmail.getServerResponse ();
if (smtpcmail.doestringcontainsmtpcode (strreponsenumber, 220))
{
this.strResponse += stresponsenumber;
}
demás
{
this.strerrMessage = 连接失败 + strresponsenumber;
devolver ;
}
cadena [] strsendBuffer = new String [6];
cadena [] stresponseCode = {220,250,251,354,221}; // Códigos de éxito del servidor SMTP
cadena strData =;
strData = string.concat (helo, smtphost);
strdata = string.concat (strdata,/r/n);
strsendbuffer [0] = strData;
strData =;
strData = string.concat (correo de :, < + desde +>);
strdata = string.concat (strdata,/r/n);
strsendbuffer [1] = strData;
strData =;
strData = string.concat (rcpt to :, < + to +>);
strdata = string.concat (strdata,/r/n);
strsendbuffer [2] = strData;
strData =;
strdata = string.concat (data,/r/n);
strsendbuffer [3] = strData;
strData =;
strdata = string.concat (desde:, displayFromName + < + from +>);
strdata = string.concat (strdata,/r/n);
strData = string.concat (strData, a:);
strData = string.concat (strData, displayToname + < + a +>);
strdata = string.concat (strdata,/r/n);
strData = string.concat (strData, sujeto:);
strData = string.concat (strData, sujeto);
strdata = string.concat (strdata,/r/n);
strData = string.concat (strData, mime-version: 1.0);
strdata = string.concat (strdata,/r/n);
strData = string.concat (strdata, x-priority: + priority);
strdata = string.concat (strdata,/r/n);
strData = string.concat (strData, x-msmail-priority: + priority);
strdata = string.concat (strdata,/r/n);
if (html == verdadero)
{
strdata = string.concat (strdata, content-type: text/html;);
}
demás
{
strdata = string.concat (strdata, content-type: text/sencillo;);
}
strdata = string.concat (strdata,/r/n);
strdata = string.concat (strdata, charset =/ iso-8859-1/);
strdata = string.concat (strdata,/r/n);
if (html == verdadero)
{
strData = string.concat (strData, content-transfer-ending: text/html;);
}
demás
{
strData = string.concat (strData, contenido-transfer-ending: text/sencillo;);
}
strdata = string.concat (strdata,/r/n);
strData = string.concat (strdata, content-base: / + base + /);
strdata = string.concat (strdata,/r/n +/r/n);
strdata = string.concat (strdata, mensaje);
strData = string.concat (strdata,/r/n./r/n);
strsendbuffer [4] = strData;
strData =;
strdata = string.concat (strdata, quit/r/n);
strsendbuffer [5] = strData;
int i = 0;
mientras (i <strsendbuffer.length)
{
smtpcmail.sendCommandtoserver (strsendbuffer [i]);
stresponsenumber = smtpcmail.getServerResponse ();
para (int j = 0; j <strresponseCode.length; j ++)
{
if (smtpcmail.doestringcontainsmtpcode (stresponsEnumber, strResponseCode [j]))
{
this.strResponse += stresponsenumber;
this.stresponse += <br>;
romper;
}
demás
{
if (j == strresponseCode.length-1)
{
this.StrerrMessage += stresponsenumber;
this.strerrMessage += strsendBuffer [i];
devolver;
}
}
}
i ++;
} // 结束循环
}
Catch (SocketException ERR)
{
this.strerrMessage + = err.message + + err.stacktrace;
}
captura (excepción e)
{
this.StrerrMessage + = E.Message + + E.StackTrace;
}
} // 结束邮件发送方法
} // 结束类
} // 结束 espacio de nombres