top
Loading...
用ASP.Net發送MailList(二)

前面我們講過如何利用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";

strCmd=strCmd+"From:" + sender.Text +"";

strCmd=strCmd+"To:" + receive1.Text + ";" + receive2.Text +"";

file://strCmd=strCmd+"To:" + receive1.Text + "";

strCmd=strCmd+"Subject:" + subject.Text +"";

strCmd=strCmd + content.Text +"";

strRet=strRet + SenSmtpCmd1(tcpc,strCmd) + "<BR>";

strCmd=".";

strRet=strRet + SenSmtpCmd(tcpc,strCmd) + "<BR>";

/*strCmd=strCmd+"From:xuexh@haitai.com.cm";

strCmd=strCmd+"To:xuexh@haitai.com.cn";

strCmd=strCmd+"subject:這是一個測試的郵件";

strCmd=strCmd+"";

strCmd=strCmd+"這些是測試郵件的郵件內容";

strCmd=strCmd+".";

*///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 + "";

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.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗