-
using System.Web.Mail ;
private void Button1_Click(object sender, System.EventArgs e)
{
//实例化MailMessage对象
System.Web.Mail.MailMessage mail=new System.Web.Mail.MailMessage();
//定义邮件的发送地址 , 可以随便填一个不存在的地址,垃圾邮件就是这样子做的吧^_^
mail.From="[email protected]";
//定义邮件的接收地址
//设置以分号分隔的收件人电子邮件地址列表
mail.To="[email protected]";
//定义邮件的暗送地址
//设置以分号分隔的电子邮件地址列表
//mail.Bcc="[email protected]";
//定义邮件的抄送地址
//设置以分号分隔的电子邮件地址列表
//mail.Cc="[email protected];[email protected]
//定义邮件的主题
mail.Subject="widebright 的邮件测试 asp.net发送邮件学习";
//设置电子邮件正文的内容类型
//在这里我们以HTML的格式发送
mail.BodyFormat=System.Web.Mail.MailFormat.Html;
//设置电子邮件的正文
mail.Body="测试一下,看行不行哟";
//用 @ 引起来的字符串以 @ 开头,并且也用双引号引起来。例如:
//用 @ 引起来的优点在于换码序列“不” 被处理,这样就可以轻松写出字符串,例如一个完全限定的文件名:
//@"c:DocsSourcea.txt" // rather than "c:\Docs\Source\a.txt"
//若要在一个用 @ 引起来的字符串中包括一个双引号,请使用两对双引号:
// @"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.
// @ 符号的另一种用法是使用碰巧成为 C# 关键字的被引用的 (/reference) 标识符。
// http://msdn2.microsoft.com/zh-CN/library/362314fe(VS.80).aspx
//设置一个附件
System.Web.Mail.MailAttachment mailAttachment=new System.Web.Mail.MailAttachment(@" F:dddddd.txt");
//邮件附加上一个附件
mail.Attachments.Add(mailAttachment);
//多个附件在这里继续添加
mailAttachment=new System.Web.Mail.MailAttachment(@"F:asp_net 发送邮件代码_百度知道.mht");
mail.Attachments.Add(mailAttachment);
//SMTP服务器 ,因为用的是本机架设的,所以写127.0.0.1 , 如果连接的是其他服务器的话,像163邮箱,要写smpt.163.com
System.Web.Mail.SmtpMail.SmtpServer="127.0.0.1";
//说是许多SMTP服务器都需要身份验证 ,防止垃圾邮件,好像叫做扩展smpt协议什么的。
//但这里连接的是自己的smpt服务器,简单的smpt,所以也没有什么验证了。
//至于从本机的SMPT服务器再把邮件发送到163或者其他邮箱 的时候要不要验证就不知道了, 实测时邮件时可以发到
//@163.com , @eyou.com,@x.cn的,也不用什么验证。
//验证
//mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//登陆名
//mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "widebright");
//登陆密码
//mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "widebright");
//发送
System.Web.Mail.SmtpMail.Send(mail);
}
上面的代码是采用 .Net 中提供的 System.Web.Mail.SmtpMail类来发送邮件,自动连接
SMPT服务器来发送邮件。以有的人是自己用TCP类,或者socket写代码实现smpt协议,不过那样子
要处理很多编码啊,协议啊等,比较麻烦。我以前用VB时也做过一个,smpt协议比较简单,不过
那些附件的编码就还要写很多代码。
这里只是smtp发信代码而已,如果要做收信等 好要pop3 服务器提供对pop3协议的支持才行。
smtp服务器是安装完IIS就有的了,pop3切没有自带,安装起来也会麻烦一些吧,没试过!
SMTP服务器的配置
我是安装完IIS 5.1后就自己启用了,在IIS信息服务管理器中配置一下就可以了。
1。 在 Domains 里面增加几个域名:右键当击“Default SMTP Virtual Server” 中的Domains
选 “New” 新建, ---》 Domain Type 选 “Remote”,
Domain name 分别填 163.com eyou.com x.cn, 因为我要给这些服务器发邮件,和上面代码中
===============
mail.To="[email protected]";
===============
相对应的,你要发送邮件给谁,就要设置相应的域名,不设置的时候邮件是发送不出去的。
2。 右键单击 163.com 等域名,选 “属性” ,勾上 “Allow incoming mail to be relayed to this domain”,勾上后邮件才能发送出去,否则还是有错。
下面的 Route domain 选默认的 Use DNS to route to domain 就可以了。
关键是在IIS中要设置好对应的smtp服务器域名,就可以发送邮件了。我在asp.net页面上测试了
好几个邮箱都是可以正常发送出去的。 像163邮箱一点按钮发送,就会收得到了。
刚发现可以添加
*.com
*.net
*cn
域名来匹配大多数的邮箱。
如增加了*.com 域名之后,就可以给 @163.com ,@eyou.com发信了
在 windows xp+ visual sutdio 2003 + iis5.1 环境下测试通过,
不过只有发现发送到新浪邮箱的信件收不到,不知道为什么。
出现 SMTP典型错误 550 5 7 1 Uable to relay
则除了domains 域名没有设置好还有可能是
SMTP虚拟服务器的设置中没有选中“allow computers which successfully authenticate to relay”复选框。如下所示,
先打开SMTP Virtual Server的属性页的Access页:
然后点击“Relay”按钮,看“Allow all computers which successfully authenticate to relay,regardless of the list above”是否选中: