Asp.Net 发送 smpt邮件 ,IIS中smtp邮件服务器的配置

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:/Docs/Source/a.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”是否选中:

 

你可能感兴趣的:(【.NET技术】)