using System;
using System.Net;
using System.Net.Sockets;
using System.Collections;
using System.Configuration;
using System.Text;
using System.Xml;
using System.IO;
using System.Web;
using System.Web.Mail;
namespace mail
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class mSendMail
{
private TcpClient tcpClt;
private NetworkStream networkStm;
private Hashtable rightCodeHT = new Hashtable();
private string smtpServerName;
private int smtpServerPort;
private string userName;
private string password;
private string to;
private string from;
private string fromName;
private string charset;
private string recipientName;
private string subject;
private string body;
private string priority;
static string Send_Method;
public mSendMail()
{
}
public mSendMail(string strToName,string strTo,string strBody)
{
to = strTo;
recipientName = strToName;
body = strBody;
smtpCodeAdd();
}
public mSendMail(string strToName,string strTo, string strSubject, string strBody)
{
to = strTo;
recipientName = strToName;
subject = strSubject;
body = strBody;
smtpCodeAdd();
}
public mSendMail(string strToName,string strTo,string strFromName,string strFrom, string strSubject, string strBody)
{
to = strTo;
recipientName = strToName;
from = strFrom;
fromName = strFromName;
subject = strSubject;
body = strBody;
smtpCodeAdd();
}
private bool initialize()
{
try
{
if(Send_Method=="1")
{
smtpServerName = ConfigurationSettings.AppSettings["smtpServerName"];
smtpServerPort = Convert.ToInt32(ConfigurationSettings.AppSettings["smtpServerPort"]);
userName = ConfigurationSettings.AppSettings["userName"];
password = ConfigurationSettings.AppSettings["password"];
//from = ConfigurationSettings.AppSettings["from"];
//fromName = ConfigurationSettings.AppSettings["fromName"];
charset = ConfigurationSettings.AppSettings["charset"];
}
else
{
smtpServerName ="";//your smtp server
smtpServerPort =25;
userName ="";//your name
password ="";//your pass
charset ="GB2312";
//from = ConfigurationSettings.AppSettings["from"];
//fromName = ConfigurationSettings.AppSettings["fromName"];
}
}
catch
{
return false;
}
priority = "Normal";
//subject = "//";
//smtpCodeAdd();
return true;
}
private string Base64Encode(string str)
{
byte[] barray;
barray=Encoding.Default.GetBytes(str);
return Convert.ToBase64String(barray);
}
private void smtpCodeAdd()
{
rightCodeHT.Add("220","");
rightCodeHT.Add("250","");
rightCodeHT.Add("251","");
rightCodeHT.Add("354","");
rightCodeHT.Add("221","");
rightCodeHT.Add("334","");
rightCodeHT.Add("235","");
}
private bool sendCommand(string str)
{
byte[] writeBuffer;
writeBuffer = Encoding.Default.GetBytes(str);
try
{
networkStm.Write(writeBuffer, 0, writeBuffer.Length);
}
catch
{
return false;
}
return true;
}
private bool isRight()
{
int streamSize;
byte[] readBuffer = new byte[1024];
string returnValue = "";
try
{
streamSize = networkStm.Read(readBuffer, 0, readBuffer.Length);
}
catch
{
return false;
}
if (streamSize != 0)
returnValue = Encoding.Default.GetString(readBuffer, 0, streamSize);
if(rightCodeHT[returnValue.Substring(0,3)] == null)
return false;
return true;
}
public bool sendMail()
{
if (!initialize())
return false;
try
{
tcpClt = new TcpClient(smtpServerName, smtpServerPort);
}
catch
{
return false;
}
networkStm = tcpClt.GetStream();
if (!isRight())
return false;
string[] sendBuffer;
string enter = "\r\n";
sendBuffer = new String[9];
sendBuffer[0] = "EHLO " + smtpServerName + enter;
sendBuffer[1] = "AUTH LOGIN" + enter;
sendBuffer[2] = Base64Encode(userName) + enter;
sendBuffer[3] = Base64Encode(password) + enter;
sendBuffer[4] = "MAIL FROM:<" + from + ">" + enter;
sendBuffer[5] = "RCPT TO:<" + to +">" + enter;
sendBuffer[6] = "DATA" + enter;
sendBuffer[7] = "From:" + fromName + "<" + from +">" + enter;
sendBuffer[7] += "To:=?" + charset.ToUpper() + "?B?"
+ Base64Encode(recipientName) + "?=" + "<" + to + ">" + enter;
sendBuffer[7] += "Subject:" + "=?" + charset.ToUpper() + "?B?"
+ Base64Encode(subject) + "?=" + enter;
sendBuffer[7] += "X-Priority:" + priority + enter;
sendBuffer[7] += "X-MSMail-Priority:" + priority + enter;
sendBuffer[7] += "Importance:" + priority + enter;
sendBuffer[7] += "X-Mailer: Huolx.Pubclass" + enter;
sendBuffer[7] += "MIME-Version: 1.0" + enter;
sendBuffer[7] += "Content-Type: multipart/mixed;" + enter;
sendBuffer[7] += " boundary=\"----=_NextPart_000_00D6_01C29593.AAB31770\"" + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770" + enter;
sendBuffer[7] += "Content-Type: text/html;" + enter;
sendBuffer[7] += " charset=\"" + charset.ToLower() + "\"" + enter;
sendBuffer[7] += "Content-Transfer-Encoding: base64" + enter + enter;
sendBuffer[7] += Base64Encode(body) + enter;
sendBuffer[7] += "------=_NextPart_000_00D6_01C29593.AAB31770--" + enter + enter;
sendBuffer[7] += enter + "." + enter;
sendBuffer[8] = "QUIT" + enter;
int i;
for (i=0;i<sendBuffer.Length;i++)
{
if (!sendCommand(sendBuffer[i]))
return false;
if (!isRight())
return false;
}
tcpClt.Close();
networkStm.Close();
return true;
}
public int Send_Email(string From, string To,string FromName,string ToName,string Subject,string Body)
{
int IsSuccess = 0;
string s1=To;
int ix;
int iy;
int iz;
char split;
split=',';
string[] MailAddress;
ix=To.LastIndexOf("@");
iy=To.LastIndexOf(".");
iz=To.LastIndexOf(",");
if (ix>0 && iy>0 && iy>ix)
{
if (iz>0)
{
MailAddress=s1.Split(split);
for(int i=0;i<MailAddress.Length;i++)
{
ix=MailAddress[i].LastIndexOf("@");
if (MailAddress[i].Substring(ix+1)=="sina.com")
{Send_Method="1";}
else{Send_Method="0";}
mSendMail mySendMail = new mSendMail(ToName,MailAddress[i],FromName,From,Subject,Body);
try
{
if (mySendMail.sendMail()== true)
IsSuccess = 0;
}
catch
{
}
}
}
else
{
if (s1.Substring(ix+1)=="sina.com")
{Send_Method="1";}
else{Send_Method="0";}
mSendMail mySendMail = new mSendMail(ToName,To,FromName,From,Subject,Body);
try
{
if (mySendMail.sendMail()== true)
IsSuccess = 0;
}
catch
{}
}
}
else{IsSuccess=2;}
return IsSuccess;
}
public int Send_TuiJian(string From, string To,string FromName,string ToName,string Title,string NewsAddr,string Message)
{
//读取邮件内容
string MessagePath;
if(System.Configuration.ConfigurationSettings.AppSettings["MessagePath"] != null)
MessagePath = System.Configuration.ConfigurationSettings.AppSettings["MessagePath"].ToString();
else
MessagePath = @"D:\abc.htm";
string strTemplate;
StreamReader stream = new StreamReader(MessagePath,System.Text.Encoding.GetEncoding("GB2312"));
try
{
stream.BaseStream.Seek(0,SeekOrigin.Begin);
strTemplate = stream.ReadToEnd();
strTemplate.Replace("\"","'");
}
finally
{
stream.Close();
}
//替换
string tmpMessage = Message;
try
{
for (int i=0; i<=(Message.Length/35); i++)
{
tmpMessage = tmpMessage.Insert((i+1)*35,"<br>");
}
}
catch
{
}
Message = tmpMessage;
Message = Message + "<br>";
strTemplate = strTemplate.Insert(strTemplate.LastIndexOf("此致,礼"),Message);
strTemplate = strTemplate.Replace("aa",ToName);
strTemplate = strTemplate.Replace("bb",FromName);
strTemplate = strTemplate.Replace("cc",Title);
strTemplate = strTemplate.Replace(@"dd",NewsAddr);
strTemplate = strTemplate.Replace("1980年",DateTime.Now.ToShortDateString());
//发送邮件
int IsSuccess = 0;
string Subject = "想请你去看看";
//邮件地址判断
string s1=To;
int ix;
int iy;
int iz;
char split;
split=',';
string[] MailAddress;
ix=To.LastIndexOf("@");
iy=To.LastIndexOf(".");
iz=To.LastIndexOf(",");
if (ix>0 && iy>0 && iy>ix)
{
if (iz>0)
{
MailAddress=s1.Split(split);
for(int i=0;i<MailAddress.Length;i++)
{
ix=MailAddress[i].LastIndexOf("@");
if (MailAddress[i].Substring(ix+1)=="sina.com")
{Send_Method="1";}
else{Send_Method="0";}
mSendMail mySendMail = new mSendMail(ToName,MailAddress[i],FromName,From,Subject,strTemplate);
try
{
if (mySendMail.sendMail()== true)
IsSuccess = 0;
}
catch
{
}
}
}
else
{
if (s1.Substring(ix+1)=="sina.com")
{Send_Method="1";}
else{Send_Method="0";}
mSendMail mySendMail = new mSendMail(ToName,To,FromName,From,Subject,strTemplate);
try
{
if (mySendMail.sendMail()== true)
IsSuccess = 0;
}
catch
{}
}
}
else{IsSuccess=2;}
return IsSuccess;
}
}
}