• 高效的Esmtp,带验证,用Socket编写


      1using System;
      2using System.Net;
      3using System.Net.Sockets;
      4using System.Collections;
      5using System.Configuration;
      6using System.Text;
      7using System.Xml;
      8using System.IO;
      9using System.Web;
     10using System.Web.Mail;
     11
     12namespace mail
     13{
     14 /// <summary>
     15 /// Class1 的摘要说明。
     16 /// </summary>

     17 public class mSendMail
     18 {
     19  private TcpClient tcpClt;
     20  private.NetworkStream.NetworkStm;
     21  private Hashtable rightCodeHT = new Hashtable();
     22  private string smtpServerName;
     23  private int smtpServerPort;
     24  private string userName;
     25  private string password;
     26  private string to;
     27  private string from;
     28  private string fromName;
     29  private string charset;
     30  private string recipientName;
     31  private string subject;
     32  private string body;
     33  private string priority;
     34        
     35  static string Send_Method;
     36  
     37
     38
     39  public mSendMail()
     40  {
     41  
     42  }

     43
     44  public mSendMail(string strToName,string strTo,string strBody)
     45  {
     46   to = strTo;
     47   recipientName = strToName;
     48   body = strBody;
     49   smtpCodeAdd();
     50  }

     51  public  mSendMail(string strToName,string strTo, string strSubject, string strBody)
     52  {
     53   to = strTo;
     54   recipientName = strToName;
     55   subject = strSubject;
     56   body = strBody;
     57   smtpCodeAdd();
     58  }

     59  public  mSendMail(string strToName,string strTo,string strFromName,string strFrom, string strSubject, string strBody)
     60  {
     61   to = strTo;
     62   recipientName = strToName;
     63   from = strFrom;
     64   fromName = strFromName;
     65   subject = strSubject;
     66   body = strBody;
     67   smtpCodeAdd();
     68  }

     69  private bool initialize()
     70  {
     71   try
     72   {
     73    if(Send_Method=="1")
     74    {
     75     smtpServerName = ConfigurationSettings.AppSettings["smtpServerName"];
     76     smtpServerPort = Convert.ToInt32(ConfigurationSettings.AppSettings["smtpServerPort"]);
     77     userName = ConfigurationSettings.AppSettings["userName"];
     78     password = ConfigurationSettings.AppSettings["password"];
     79     //from = ConfigurationSettings.AppSettings["from"];
     80     //fromName = ConfigurationSettings.AppSettings["fromName"];
     81     charset = ConfigurationSettings.AppSettings["charset"];
     82    }

     83    else
     84    {
     85     smtpServerName ="";//your smtp server
     86     smtpServerPort =25;
     87     userName ="";//your name
     88     password ="";//your pass
     89     charset ="GB2312";
     90     //from = ConfigurationSettings.AppSettings["from"];
     91     //fromName = ConfigurationSettings.AppSettings["fromName"]; 
     92    }

     93
     94    
     95    
     96   }

     97   catch
     98   {
     99    return false;
    100   }

    101   priority = "Normal";
    102   //subject = "//";
    103   //smtpCodeAdd();
    104   return true;
    105  }

    106
    107  private string Base64Encode(string str)
    108  {
    109   byte[] barray;
    110   barray=Encoding.Default.GetBytes(str);
    111   return Convert.ToBase64String(barray);
    112  }

    113
    114  private void smtpCodeAdd()
    115  {
    116   rightCodeHT.Add("220","");
    117   rightCodeHT.Add("250","");
    118   rightCodeHT.Add("251","");
    119   rightCodeHT.Add("354","");
    120   rightCodeHT.Add("221","");
    121   rightCodeHT.Add("334","");
    122   rightCodeHT.Add("235","");
    123  }

    124
    125  private bool sendCommand(string str)
    126  {
    127   byte[] writeBuffer;
    128   writeBuffer = Encoding.Default.GetBytes(str);
    129   try
    130   {
    131   .NetworkStm.Write(writeBuffer, 0, writeBuffer.Length);
    132   }

    133   catch
    134   {
    135    return false;
    136   }

    137   return true;
    138  }

    139
    140  private bool isRight()
    141  {
    142   int streamSize;
    143   byte[] readBuffer = new byte[1024];
    144   string returnValue = "";
    145   try
    146   {
    147    streamSize =.NetworkStm.Read(readBuffer, 0, readBuffer.Length);
    148   }

    149   catch
    150   {
    151    return false;
    152   }

    153   if (streamSize != 0)
    154    returnValue = Encoding.Default.GetString(readBuffer, 0, streamSize);
    155   if(rightCodeHT[returnValue.Substring(0,3)] == null)
    156    return false;
    157   return true;
    158  }

    159
    160  public bool sendMail()
    161  {
    162   if (!initialize())
    163    return false;
    164   try
    165   {
    166    tcpClt = new TcpClient(smtpServerName, smtpServerPort);
    167   }

    168   catch
    169   {
    170    return false;
    171   }

    172  .NetworkStm = tcpClt.GetStream();
    173   if (!isRight())
    174    return false;
    175
    176   string[] sendBuffer;
    177   string enter = "\r\n";
    178
    179   sendBuffer = new String[9];
    180   sendBuffer[0= "EHLO " + smtpServerName + enter;
    181   sendBuffer[1= "AUTH LOGIN" + enter;
    182   sendBuffer[2= Base64Encode(userName) + enter;
    183   sendBuffer[3= Base64Encode(password) + enter;
    184   sendBuffer[4= "MAIL FROM:<" + from + ">" + enter;
    185   sendBuffer[5= "RCPT TO:<" + to +">" + enter;
    186   sendBuffer[6= "DATA" + enter;
    187   sendBuffer[7= "From:" + fromName + "<" + from +">" + enter;
    188   sendBuffer[7+= "To:=?" + charset.ToUpper() + "?B?"
    189    + Base64Encode(recipientName) + "?=" + "<" + to + ">" + enter;
    190   sendBuffer[7+= "Subject:" + "=?" + charset.ToUpper() + "?B?"
    191    + Base64Encode(subject) + "?=" + enter;
    192   sendBuffer[7+= "X-Priority:" + priority + enter;
    193   sendBuffer[7+= "X-MSMail-Priority:" + priority + enter;
    194   sendBuffer[7+= "Importance:" + priority + enter;
    195   sendBuffer[7+= "X-Mailer: Huolx.Pubclass" + enter;
    196   sendBuffer[7+= "MIME-Version: 1.0" + enter;
    197   sendBuffer[7+= "Content-Type: multipart/mixed;" + enter;
    198   sendBuffer[7+= "   boundary=\"----=_NextPart_000_00D6_01C29593.AAB31770\"" + enter;
    199   sendBuffer[7+= "------=_NextPart_000_00D6_01C29593.AAB31770" + enter;
    200   sendBuffer[7+= "Content-Type: text/html;" + enter;
    201   sendBuffer[7+= "   charset=\"" + charset.ToLower() + "\"" + enter;
    202   sendBuffer[7+= "Content-Transfer-Encoding: base64" + enter + enter;
    203   sendBuffer[7+= Base64Encode(body) + enter;
    204   sendBuffer[7+= "------=_NextPart_000_00D6_01C29593.AAB31770--" + enter + enter;
    205   sendBuffer[7+= enter + "." + enter;
    206   sendBuffer[8= "QUIT" + enter;
    207
    208   int i;
    209
    210   for (i=0;i<sendBuffer.Length;i++)
    211   {
    212    if (!sendCommand(sendBuffer[i]))
    213     return false;
    214    if (!isRight())
    215     return false;
    216   }

    217
    218   tcpClt.Close();
    219  .NetworkStm.Close();
    220
    221   return true;
    222  }

    223
    224
    225  public int Send_Email(string From, string To,string FromName,string ToName,string Subject,string Body)
    226  {
    227      int IsSuccess = 0;
    228   string s1=To;
    229   int ix;
    230   int iy;
    231   int iz;
    232   char split;
    233   split=',';
    234   string[] MailAddress;
    235   
    236   ix=To.LastIndexOf("@");
    237   iy=To.LastIndexOf(".");
    238   iz=To.LastIndexOf(",");
    239
    240   if (ix>0 && iy>0 && iy>ix)
    241   {
    242    if (iz>0)
    243    {   
    244     MailAddress=s1.Split(split);
    245     for(int i=0;i<MailAddress.Length;i++)
    246     {
    247      ix=MailAddress[i].LastIndexOf("@");
    248      if (MailAddress[i].Substring(ix+1)=="sina.com")
    249      {Send_Method="1";}
    250      else{Send_Method="0";}
    251          
    252      mSendMail mySendMail = new mSendMail(ToName,MailAddress[i],FromName,From,Subject,Body);
    253      try
    254      {
    255       if (mySendMail.sendMail()== true)
    256        IsSuccess = 0;
    257      }

    258      catch
    259      {
    260           
    261      }

    262          
    263     }

    264    }

    265    else
    266    {
    267     if (s1.Substring(ix+1)=="sina.com")
    268     {Send_Method="1";}
    269     else{Send_Method="0";}
    270       
    271     mSendMail mySendMail = new mSendMail(ToName,To,FromName,From,Subject,Body);
    272     try
    273     {
    274      if (mySendMail.sendMail()== true)
    275       IsSuccess = 0;
    276     }

    277     catch
    278     {}
    279     
    280    }

    281   }

    282   else{IsSuccess=2;}
    283   return IsSuccess;
    284  }

    285
    286  public int Send_TuiJian(string From, string To,string FromName,string ToName,string Title,string NewsAddr,string Message)
    287  {
    288   //读取邮件内容
    289   string MessagePath;
    290   if(System.Configuration.ConfigurationSettings.AppSettings["MessagePath"!= null)
    291    MessagePath = System.Configuration.ConfigurationSettings.AppSettings["MessagePath"].ToString();
    292   else
    293    MessagePath = @"D:\abc.htm";
    294   string strTemplate;
    295   
    296   StreamReader  stream = new StreamReader(MessagePath,System.Text.Encoding.GetEncoding("GB2312"));      
    297   try
    298   {
    299    
    300    stream.BaseStream.Seek(0,SeekOrigin.Begin);
    301    strTemplate = stream.ReadToEnd();
    302    strTemplate.Replace("\"","'");
    303   }

    304   finally
    305   {
    306    stream.Close();
    307   }

    308
    309   //替换
    310   string tmpMessage = Message;
    311   try
    312   {
    313    for (int i=0; i<=(Message.Length/35); i++)
    314    {
    315     tmpMessage = tmpMessage.Insert((i+1)*35,"<br>");
    316    }

    317   }

    318   catch
    319   {
    320   }

    321   Message = tmpMessage;
    322   Message = Message + "<br>";
    323   strTemplate = strTemplate.Insert(strTemplate.LastIndexOf("此致,礼"),Message);
    324   strTemplate = strTemplate.Replace("aa",ToName);
    325   strTemplate = strTemplate.Replace("bb",FromName);
    326   strTemplate = strTemplate.Replace("cc",Title);
    327   strTemplate = strTemplate.Replace(@"dd",NewsAddr);
    328   strTemplate = strTemplate.Replace("1980年",DateTime.Now.ToShortDateString());
    329
    330   //发送邮件
    331   int IsSuccess = 0;
    332   string Subject = "想请你去看看";
    333   
    334   //邮件地址判断
    335   string s1=To;
    336   int ix;
    337   int iy;
    338   int iz;
    339   char split;
    340   split=',';
    341   string[] MailAddress;
    342   
    343   ix=To.LastIndexOf("@");
    344   iy=To.LastIndexOf(".");
    345   iz=To.LastIndexOf(",");
    346
    347   if (ix>0 && iy>0 && iy>ix)
    348   {
    349    if (iz>0)
    350    {   
    351     MailAddress=s1.Split(split);
    352     for(int i=0;i<MailAddress.Length;i++)
    353     {
    354      ix=MailAddress[i].LastIndexOf("@");
    355      if (MailAddress[i].Substring(ix+1)=="sina.com")
    356      {Send_Method="1";}
    357      else{Send_Method="0";}
    358          
    359      mSendMail mySendMail = new mSendMail(ToName,MailAddress[i],FromName,From,Subject,strTemplate);
    360      try
    361      {
    362       if (mySendMail.sendMail()== true)
    363        IsSuccess = 0;
    364      }

    365      catch
    366      {
    367           
    368      }

    369          
    370     }

    371    }

    372    else
    373    {
    374     if (s1.Substring(ix+1)=="sina.com")
    375     {Send_Method="1";}
    376     else{Send_Method="0";}
    377       
    378     mSendMail mySendMail = new mSendMail(ToName,To,FromName,From,Subject,strTemplate);
    379     try
    380     {
    381      if (mySendMail.sendMail()== true)
    382       IsSuccess = 0;
    383     }

    384     catch
    385     {}
    386     
    387    }

    388   }

    389   else{IsSuccess=2;}
    390   return IsSuccess;
    391
    392  }

    393 }

    394
    395}

    396
  • 相关阅读:
    实现一个圆形进度条
    给你的jQuery项目赋予Router技能吧
    matlab新手入门(四)(翻译)
    matlab新手入门(三)(翻译)
    matlab新手入门(二)(翻译)
    matlab新手入门(一)(翻译)
    安装Matlab出现Error 1935错误解决方法
    Linux Ubuntu下Jupyter Notebook的安装
    lung 分割论文
    链表的回文结构
  • 原文地址:https://www.cnblogs.com/icd/p/755158.html
Copyright © 2020-2023  润新知