前面我们讲过如何利用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>