用ASP.Net发送MailList(3)

发表于:2007-06-30来源:作者:点击数: 标签:
前面我们讲过如何利用ASP .net 来发送Mail,其实这篇文章的实际目的压根就不是为了让大家利用ASP.NET来简单的发送一封Mail,那样是没有任何作用的,因为Asp.Net 已经提供了这样的强大的功能我们文章的标题就是MailList,所以我们的任务就是实现用Asp.Net发送一
     前面我们讲过如何利用ASP.net 来发送Mail,其实这篇文章的实际目的压根就不是为了让大家利用ASP.NET来简单的发送一封Mail,那样是没有任何作用的,因为Asp.Net 已经提供了这样的强大的功能我们文章的标题就是MailList,所以我们的任务就是实现用Asp.Net发送一个MailList,前面的那位同志说了,我们不需要这么麻烦,只要作个循环即可,不错,这个的确是一个办法,而且豆腐以前也一直是这样在做的,但是这样作的缺点就是浪费了大量的流路资源,和 Mellissa又有什么本质的区别呢?其实在SMTP(Simple Mail Transfer Protcol)已经提供了制作SMTP 的方法,当我们Connect 以后,我们可以不断的向服务器发送RCPT 命令,这样就可以利用一个Connect向多个mail Addr 发送Mail 的Data 内容,在这里我们一定要注意到我们的Data 内容仅仅是发送一次的,这样就节省了大量的网路资源。
  
    <%@ Assembly Name="System.Net" %>
  
    <%@ Import Namespace="System.Net" %>
  
    <% @Import Namespace="System.Net.Sockets" %>
  
    <%@ Import Namespace="System.IO" %>
  
    <SCRIPT language=C# runat="server">
  
     protected void SendMailClick(Object Src, EventArgs E){
  
     String smtpserver=txtSmtpserver.Text; file://smtp服务器的IP地址
  
     TCPClient tcpc = new TCPClient();
  
     if (0 == tcpc.Connect(smtpserver, txtPort.Text.ToInt16()))
  
      {
  
       file://连接smtp 服务器成功
  
       Stream s;
  
       StreamReader sr ;
  
       String strCmd;
  
       Byte[] arrCmd;
  
       String strRet;
  
       String[] arrRet;
  
       sr = new StreamReader(tcpc.GetStream(), Encoding.Default);
  
       strRet=sr.ReadLine() + "
  "; file://mail server 的欢迎语
  
       file://服务器连接成功以后,首先向服务器发送HeLo命令
  
       strCmd="HELO www.asp888.net";
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://然后向服务器发送信件的成员的信箱
  
       strCmd="mail from:"+ sender.Text;
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://向服务器发送收件人的信箱
  
       strCmd="rcpt to:" + receive2.Text;
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://邮件列表的发送工作,其实就是打开一次Socket连接,发送多个mail的结果
  
       strCmd="rcpt to:" + receive1.Text;
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://所有的准备工作都已经作好了,下面开始进行邮件的部分
  
       strCmd="data";
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://邮件内容
  
       strCmd="Date: 1234567\r\n";
  
       strCmd=strCmd+"From:" + sender.Text +"\r\n";
  
       strCmd=strCmd+"To:" + receive1.Text + ";" + receive2.Text +"\r\n";
  
       file://strCmd=strCmd+"To:" + receive1.Text + "\r\n";
  
       strCmd=strCmd+"Subject:" + subject.Text +"\r\n\r\n";
  
       strCmd=strCmd + content.Text +"\r\n\r\n";
  
       strRet=strRet + SenSmtpCmd1(tcpc,strCmd) + "<BR>";
  
       strCmd="\r\n.\r\n";
  
       strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       /*strCmd=strCmd+"From:xuexh@haitai.com.cm\r\n";
  
       strCmd=strCmd+"To:xuexh@haitai.com.cn\r\n";
  
      strCmd=strCmd+"subject:这是一个测试的邮件\r\n";
  
       strCmd=strCmd+"\r\n";
  
       strCmd=strCmd+"这些是测试邮件的邮件内容\r\n";
  
       strCmd=strCmd+"\r\n.\r\n";
  
       *///strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";
  
       file://最后 关闭与smtp 服务器的连接
  
       tcpc.Close();
  
       showmsg.Text=strRet;
  
      }
  
     else
  
      {
  
       showmsg.Text="对不起,连接服务器失败";
  
      }
  
     }
  
     String SenSmtpCmd(TCPClient tcpc,String strCmd){
  
      file://为了程序的简单可读,特意写了这个函数
  
      Byte[] arrCmd;
  
      String strRet;
  
      StreamReader sr;
  
      Stream s;
  
      s=tcpc.GetStream();
  
      strCmd = strCmd + "\r\n";
  
      arrCmd= Encoding.Default.GetBytes(strCmd.ToCharArray());
  
      s=tcpc.GetStream();
  
      s.Write(arrCmd, 0, strCmd.Length);
  
      sr = new StreamReader(tcpc.GetStream(), Encoding.Default);
  
      strRet=sr.ReadLine();
  
      return strRet;
  
     }
  
     String SenSmtpCmd1(TCPClient tcpc,String strCmd){
  
      file://为了程序的简单可读,特意写了这个函数
  
      Byte[] arrCmd;
  
      String strRet;
  
      StreamReader sr;
  
      Stream s;
  
      s=tcpc.GetStream();
  
      strCmd = strCmd;
  
      arrCmd= Encoding.Default.GetBytes(strCmd.ToCharArray());
  
      s=tcpc.GetStream();
  
      s.Write(arrCmd, 0, strCmd.Length);
  
      return "";
  
      }
  
    
  
     <FORM id=testForm runat="server">
  
    <?XML:namespace prefix = asp /><asp:label id=showmsg runat="server"></asp:label>
  
     SMTP服务器:<asp:TextBox id=txtSmtpserver runat="server"></asp:TextBox><asp:TextBox id=txtPort runat="server" Text="25"></asp:TextBox>
  
     发信人:<asp:TextBox id=sender runat="server"></asp:TextBox>
  
     收信人1:<asp:TextBox id=receive1 runat="server"></asp:TextBox>
  
     收信人2:<asp:TextBox id=receive2 runat="server"></asp:TextBox>
  
     信件主题:<asp:TextBox id=subject runat="server"></asp:TextBox>
  
     信件内容:<asp:TextBox id=content runat="server" TextMode="MultiLine" rows="10/">
  
     <asp:Button id=SendMail onclick=SendMailClick runat="server" Text="发送"></asp:Button>
  
     </FORM>
  
   
  </asp:TextBox>
  

原文转自:http://www.ltesting.net