分享
 
 
 

用ASP.Net发送MailList

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

/*

豆腐制作 都是精品

豆腐技术站 http://www.asp888.net

如转载 请保留完整版权信息

*/

我们知道,在ASP.Net中发送Email 是一件很简单的事情,豆腐在这里要给大家将一种相对来说比较复杂的一种发送Email的方式,用Socket 来发送Email我们首先来熟悉熟悉SMTP 协议我们来看看SMTP 在 TELNET 下我们应该如何

命令:telnet pop.21cn.com 25

回应:220 21cn.com SMTP Server of AIMC 2.5.3.0; Sat Feb 10 11:34:18 2001

命令:helo www.asp888.ne

回应:250 21cn.com, www.asp888.net<61.134.6.89> okay.

命令:mail from:XXXX@21cn.com //XXX 是你在21cn 的user

回应:250 <XXXX@21cn.com>, sender ok.

命令:rcpt to:XXX@domain.com //XXX@domain.com 是收信人的mail地址

回应:250 User not local, will forward to <XXX@domain.com>.

命令:data

回应:354 Start mail input; end with <CRLF>.<CRLF>

From:<XXXX@21cn.com>

To:<XXX@doamin.com>

Subject:test

this is a test

.

回应:250 Requested mail action okay, completed.

好了,这个过程就是一个完整的SMTP的过程,下面我们就来看看 豆腐 用 C# 做的这个发送Mail的工具

<%@ 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; //smtp服务器的IP地址

TCPClient tcpc = new TCPClient();

if (0 == tcpc.Connect(smtpserver, txtPort.Text.ToInt16()))

{

//连接smtp 服务器成功

Stream s;

StreamReader sr ;

String strCmd;

Byte[] arrCmd;

String strRet;

String[] arrRet;

sr = new StreamReader(tcpc.GetStream(), Encoding.Default);

strRet=sr.ReadLine() + "<br>"; //mail server 的欢迎语

//服务器连接成功以后,首先向服务器发送HeLo命令

strCmd="HELO www.asp888.net";

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

//然后向服务器发送信件的成员的信箱

strCmd="mail from:"+ sender.Text;

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

//向服务器发送收件人的信箱

strCmd="rcpt to:" + receive.Text;

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

//所有的准备工作都已经作好了,下面开始进行邮件的部分

strCmd="data";

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

//邮件内容

strCmd="Date: 1234567\r\n";

strCmd=strCmd+"From:" + sender.Text +"\r\n";

strCmd=strCmd+"To:" + receive.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>";

//最后 关闭与smtp 服务器的连接

tcpc.Close();

showmsg.Text=strRet;

}

else

{

showmsg.Text="对不起,连接服务器失败";

}

}

String SenSmtpCmd(TCPClient tcpc,String strCmd){

//为了程序的简单可读,特意写了这个函数

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){

//为了程序的简单可读,特意写了这个函数

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 "";

}

</script>

<form id=testForm runat=server>

<asp:label id=showmsg runat=server /><br>

SMTP服务器:<asp:TextBox id=txtSmtpserver runat=server /><asp:TextBox id=txtPort Text=25 runat=server /><br>

发信人:<asp:TextBox id=sender runat=server />

<br>

收信人:<asp:TextBox id=receive runat=server />

<br>

信件主题:<asp:TextBox id=subject runat=server />

<br>

信件内容:<asp:TextBox id=content runat=server TextMode=MultiLine rows=10/>

<asp:Button Text="发送" id=SendMail onClick=SendMailClick runat=server />

</form>

大家可能在看这段程序的时候已经发现了这样的两个函数SenSmtpCmd和SenSmtpCmd1,这两个函数的作用是

SenSmtpCmd1不接收smtp server 传递回来的回应,主要是目前的这个版本的asp.net 在处理中文的时候还是存在一定的Bug,所以就只有采取这样的变通的办法了

前面我们讲过如何利用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; //smtp服务器的IP地址

TCPClient tcpc = new TCPClient();

if (0 == tcpc.Connect(smtpserver, txtPort.Text.ToInt16()))

{

//连接smtp 服务器成功

Stream s;

StreamReader sr ;

String strCmd;

Byte[] arrCmd;

String strRet;

String[] arrRet;

sr = new StreamReader(tcpc.GetStream(), Encoding.Default);

strRet=sr.ReadLine() + "<br>"; //mail server 的欢迎语

//服务器连接成功以后,首先向服务器发送HeLo命令

strCmd="HELO www.asp888.net";

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

//然后向服务器发送信件的成员的信箱

strCmd="mail from:"+ sender.Text;

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

//向服务器发送收件人的信箱

&n

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有