发布源码:高效的Esmtp,带验证,用Socket编写
发布源码:高效的Esmtp,带验证,用Socket编写 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;
}
}
}