在Asp.Net中使用SmtpMail发送邮件的方法:实例

.NET里,发送邮件的功能已经封装进.NET Framework的System.Web.Mail的命名空间里了,使用这个命名空间下类,就可以很容易的构建一个发送邮件的程序,所需要仅仅是在windows中架构好SMTP服务器。

  System.Web.Mail命名空间。这个命名控件下包含了以下的对象和三个属性:  
  包含的对象:

  MailAttachment:与邮件附件有关的对象类
  MailMessage :邮件主体
  SmtpMail :负责发送邮件的SMTP协议。

  属性列表:

  MailEncoding :邮件的编码(Base64,UUEncode)
  MailFormat :邮件的格式(Html超文本格式,Text纯文本格式)
  MailPriority :邮件优先级(High, Medium, Low)

  构建MailMessage对象:
  
  MailMessage对象是邮件的承载主体,通常可以先构建好MailMessage对象,然后设置它的属性的方式来

  构建邮件程序,下面列出了的是一些常用的属性:

  Attachments :邮件附件
  Bcc :暗送地址
  Body :邮件主体
  BodyFormat :邮件格式(html,text)
  Cc :抄送地址
  From :发信人地址
  Priority :邮件优先级(High, Medium,Low)
  Subject :邮件主题
  To :接收人地址
  UrlContentBase :在HTML格式邮件中的URL编码方式
  UrlContentLocation:邮件信息的优先级(High, Medium,Low)

  使用SMTPMail发送邮件
  
  构建好MailMessage对象之后,还需要使用另外一个对象-SMTPMail-来发送邮件,SMTPMAIL有一个很

  重要的方法:Send,该方法有两个不同用法,其中一个可以仅仅发送整个的MailMessage对象:
  SmtpMail.Send(myEmailObject);

  另外一个允许你分别指定发送者,收邮件地址,邮件主题,邮件主题,然后再发送出去:

  SmtpMail.Send(strFrom, strTo, strSubject, strBody);
现在,让我们来看看一个完整的例子,在这个例子中,我先创建一个MailMessage对象,然后设置部分属性,最后使用SmtpMail对象把它发送出去:

<%@ Page Language="C#" %>
<script language="C#" runat="server">


void Page_Load()
{
    // CREATE A MAIL MESSAGE
    System.Web.Mail.MailMessage myEmail = new System.Web.Mail.MailMessage();


    // SET MESSAGE PARAMETERS
    myEmail.From = "
agent@mypersonalshoppers.com";
    myEmail.To = "
john@johnsmith.com";
    myEmail.Subject = "Product Availability Notice";
    myEmail.BodyFormat = System.Web.Mail.MailFormat.Html;
    myEmail.Body = "The sunglasses you expressed interest in are now in stock.";


    //SEND THE MESSAGE
    System.Web.Mail.SmtpMail.Send(myEmail);


    //UPDATE STATUS
    lblMailStatus.Text = "Mail successfully sent.";
}


</script>


<html>
<body>


<asp:Label id="lblMailStatus" runat="server" />


</body>
</html>
<%@ Page Language="VB" %>


<script language="VB" runat="server">


Sub Page_Load()
    'CREATE A MAIL MESSAGE
    Dim myEmail as System.Web.Mail.MailMessage = new System.Web.Mail.MailMessage()


    'SET MESSAGE PARAMETERS
    myEmail.From = "
agent@mypersonalshoppers.com"
    myEmail.To = "
john@johnsmith.com"
    myEmail.Subject = "Product Availability Notice"
    myEmail.BodyFormat = System.Web.Mail.MailFormat.Html
    myEmail.Body = "The sunglasses you expressed interest in are now in stock."


    'SEND THE MESSAGE
    System.Web.Mail.SmtpMail.Send(myEmail)


    'UPDATE STATUS
    lblMailStatus.Text = "Mail successfully sent."
End Sub


</script>


<html>
<body>
    <asp:Label id="lblMailStatus" runat="server" />
</body>
</html>

 

 二.....................

在ASP中,就可以通过调用CDONTS组件发送简单邮件,在ASP.Net中,自然也可以。不同的是,.Net Framework中,将这一组件封装到了System.Web.Mail命名空间中。


一个典型的邮件发送程序如下:
<%@ Import Namespace="System.Web.Mail" %>
<script runat="server">
MailMessage mail=new MailMessage();
 mail.From="service@brookes.com";
 mail.To="brookes@brookes..com";
 mail.BodyFormat=MailFormat.Text;
 mail.Body="a test smtp mail.";
 mail.Subject="r u ok?";
 SmtpMail.SmtpServer="localhost";
 SmtpMail.Send(mail);
</script>


通常情况下,系统调用IIS自带的默认SMTP虚拟服务器就可以实现邮件的发送。但是也经常会遇到这样的错误提示:

The server rejected one or more recipient addresses. The server response was: 550 5.7.1 Unable to relay for brookes@brookes.com

 产生这个错误的原因除了地址错误的可能外,还有一个重要原因。如上文提到的,IIS并不带有真正的邮件功能,只是借用一个“SMTP虚拟服务器”实现邮件的转发。在MSDN中,有如下提示:

如果本地 SMTP 服务器(包括在 Windows 2000Windows Server 2003 中)位于阻塞任何直接 SMTP 通信量(通过端口 25)的防火墙之后,则需要查找网络上是否有可用的智能主机能用来中转发往 Internet 的 SMTP 消息。
智能主机是一个 SMTP 服务器,它能够中转从内部 SMTP 服务器直接发送到 Internet 的外出电子邮件。智能主机应能同时连接到内部网络和 Internet,以用作电子邮件网关。

打开默认SMTP虚拟服务器-属性-访问-中继限制,可以看到,这种转发或者中继功能受到了限制。在限制列表中,添加需要使用此服务器的主机的IP地址,就可以解决上文提到的问题。

如果不使用IIS自带的SMTP虚拟服务器而使用其他真正的邮件服务器,如IMail,Exchange等,常常遇到服务器需要寄送者身份验证的问题(ESMTP)。在使用需要验证寄送者身份的服务器时,会出现错误:

The server rejected one or more recipient addresses. The server response was: 550 not local host ckocoo.com, not a gateway

以前在ASP中,遇到这种问题没有什么解决的可能,只能直接使用CDO组件(CDONTS的父级组件):
 conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value=CdoProtocolsAuthentication.cdoBasic;
 conf.Fields[CdoConfiguration.cdoSendUserName].Value="brookes";
 conf.Fields[CdoConfiguration.cdoSendPassword].Value="XXXXXXX";

在.Net Framework 1.1中,显然对这一需求有了考虑,在MailMessage组件中增加了Fields集合易增加ESMTP邮件服务器中的寄送者身份验证的问题。不过,这一方法仅适用于.Net Framework 1.1,不适用于.Net Framework 1.0版本。带有寄送者身份验证的邮件发送程序如下:


<%@ Import Namespace="System.Web.Mail" %>
<script runat="server">
MailMessage mail=new MailMessage();
 mail.From="service@brookes.com";
 mail.To="brookes@brookes.com";
 mail.BodyFormat=MailFormat.Text;
 mail.Body="a test smtp mail.";
 mail.Subject="r u ok?";
 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "brookes"); //set your username here
 mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "walkor"); //set your password here
 SmtpMail.SmtpServer="lsg.moon.net";
 SmtpMail.Send(mail);
</script>


有了这种方法,终于可以不必再借助于Jmail、EasyMail等第三方组件,而只简单使用SmtpMai就可以l完成邮件的发送了!

 三,,,,,,,,,,,,,,,,

<%@Import Namespace="System.Web.Mail" %> 
   <script language="C#" runat="server"> 
   void sendButton_Click(Object sender,EventArgs e)  
   {  
    MailMessage mailObj = new MailMessage(); 
    string strFileName;
      strFileName="";
   if (EmailFrom.Text!="")
      {
          mailObj.From = EmailFrom.Text; 
      }
   
   if (EmailTo.Text!="")
   {
        mailObj.To = EmailTo.Text ;
   }
  
   if (EmailCc.Text!="")
   {
       mailObj.Cc = EmailCc.Text ;
   }
  
   if (EmailBcc.Text!="")
   {
       mailObj.Bcc = EmailBcc.Text ;
       mailObj.BodyFormat = MailFormat.Text ;
       mailObj.Priority = MailPriority.Normal ;
       mailObj.Subject = EmailSubject.Text ;
       mailObj.Body = EmailBody.Text ;    
       strFileName=Emailfile.PostedFile.FileName;
    } 
   if (strFileName!="")
   {
       mailObj.Attachments.Add(new MailAttachment(strFileName)); 
       SmtpMail.SmtpServer = ""; 
   SmtpMail.Send(mailObj) ;
   panelSendEmail.Visible = false ;
   panelMailSent.Visible = true ;
   }
   }
   </script>
   <html> 
   <body> 
   <asp:panel id="panelSendEmail" runat="server"> 
   <form Method="Post" EncType="Multipart/Form-Data" runat="server"> 
   <h2>欢迎用ASP.NET来发送E-mail</h2> 
   <b>请输入邮件发送地址:</b> 
   <asp:Textbox id="EmailFrom" size="30" runat="server" /> 
   <p> 
   <b>请输入邮件目的地址:</b> 
   <asp:Textbox id="EmailTo" size="30" runat="server" /> 
   <p> 
   <b>请输入邮件抄送地址:</b> 
   <asp:Textbox id="EmailCc" size="30" runat="server" /> 
   <p> 
   <b>请输入邮件密送地址:</b> 
   <asp:Textbox id="EmailBcc" size="30" runat="server" /> 
   <p> 
   <b>请输入邮件主题:</b> 
   <asp:Textbox id="EmailSubject" size="30" runat="server" /> 
   <p> 
   <b>请输入邮件主体:</b> 
   <asp:Textbox id="EmailBody" TextMode="MultiLine" 
         Columns="40" Rows="10" runat="server" /> 
   <p> 
   <b>请加入附件名称:</b> 
   <input id="Emailfile" type="file" runat="server" size="40" /> 
   <asp:button runat="server" id="sendButton" Text="发送" 
         OnClick="sendButton_Click" /> 
   </form> 
   </asp:panel> 
   <asp:panel id="panelMailSent" runat="server" Visible="False"> 
   您的邮件已经成功发送,欢迎您的再次使用! 
   </asp:panel> 
   </body> 
   </html> 

 

四.using System.Web.Mail;
2)
 

MailMessage mail  =   new  MailMessage();
       mail.To 
=   " me@mycompany.com " ;
       mail.From 
=   " you@yourcompany.com " ;
       mail.Subject 
=   " this is a test email. " ;
       mail.Body 
=   " Some text goes here " ;
          mail.BodyFormat = MailFormat.Html;//设置为HTML格式 
         //设置为需要用户验证
      mail.Fields.Add("
http://schemas.microsoft.com/cdo/configuration/smtpauthenticate ",  " 1 " );   
         //设置验证用户名(把my_username_here改为你的验证用户名)
      mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendusername" " my_username_here " ); 
         //设置验证密码(把password改为你的验证密码)
      mail.Fields.Add( " http://schemas.microsoft.com/cdo/configuration/sendpassword " "password " ); 
      SmtpMail.SmtpServer 
=   " mail.mycompany.com " ;   // 邮件服务器地址
      SmtpMail.Send( mail );

五.................

本文举例说明在ASP.NET中发送Email的众多可能性,内容覆盖了诸如Email格式、优先权、附件及Email编码等方面。

ASP.NET被赋予了一个发送Email的新对象,名为SmtpMail。使用SmtpMail对象从ASP.NET页面中发送Email时,可以遵循以下简单步骤:

▲包含与邮件有关类所需要的名称空间;
▲例示一个信息对象,设置属性;
▲使用SmtpMail对象实例的send方法发送邮件。

现在我们就来一步一步地研究从一个ASP.NET页面发送Email的过程。我们使用了VB来说明这个例子,最后将包含VB和C#的完整代码。

第一步:包含名称空间

在ASP.NET 页面中引入System.Web.Util 名称空间,这个名称空间中包括了发送一个email所必须的所有对象。这些对象是:

SmtpMail:代表邮件系统,用于发送email。
MailMessage:代表一个信息,其属性包括发件人地址、收件人地址等。
MailFormat:代表信息的格式:HTML、文本等。
MailAttachment:代表一个email附件。
MailEncoding enum:代表Base64 或Uuencode的任何编码。取值范围:Base64、UUencode
MailPriority enum:用来为信息设置优先权。值为:高、低、一般。
<% @Import Namespace = "System.Web.Util" %>

第二步:例示 MailMessage 对象

使用以下语句来例示MailMessage对象:

Dim mailObj AS new MailMessage

用MailMessage对象的属性来准备邮件。MailMessage对象有下列属性:

From:发件人的Email地址
To:收件人的Email地址
Subject:email的主题
Body:email的主体
CC:email抄送的收件人列表
BCC:email暗送的收件人列表
Priority:信息的优先权:高、低或一般
BodyEncoding:信息体的编码,如果有的话,就是Base64或UUencode
BodyFormat:信息的格式:Html 或text
Attachments:附加到email 的MailAttachment对象列表,主要就是对这个对象集合的一个引用

下面这段代码示范了使用MailMessage 对象属性的方法,它们代表了将在本例中创建的一个信息,这个信息要用SmtpMail对象来发送。在例子中,mailObj引用了信息对象的例示:

mailObj.From = "abc@mydomain.com"
mailObj.To = Request.Form ("to")
mailObj.Subject = "subject of the mail"
mailObj.Body = "Message of the mail"

第三步:发送Email

这时,我们就可以使用SmtpMail 对象的Send方法来发送邮件了:

SmtpMail.Send(mailObj)

完整实例

最后,我们把以上解释的属性结合在一个完整的例子中。为了说明用ASP.NET 发送一个email 的全部可能性,我们还包含了一些“小技巧”。下面是使用VB.NET的完整例子:

<%@page language="VB" %>
<%@Import Namespace="System.Web.Util" %>
<HTML><BODY>
<SCRIPT LANGUAGE="VB" RUNAT="server">
' This method is called on the server when the submit
' button is clicked on the client and when the page
' posts back to itself
Sub SendMail (Obj As Object, E As EventArgs)
' Instantiate a MailMessage object. This serves as a message object
' on which we can set properties.
Dim mailObj AS new MailMessage
' Set the from and to address on the email
mailObj.From = Request.Form("From")
mailObj.To = Request.Form("To")
mailObj.Subject = "Subject Of the Mail"
mailObj.Body = "Body of the Mail"
' Optional: HTML format for the email
mailObj.BodyFormat = MailFormat.Html
' Optional: Encoding for the message
mailObj.BodyEncoding = MailFormat.Base64
' Optional: Set the priority of the message to high
mailObj.Priority = MailPriority.High
' Optional: Attach a file to the email.
' Note here that we have created a MailAttachment object to
' attach a file to the email
mailObj.Attachments.Add(new MailAttachment("c:/test.doc"))
' Send the email using the SmtpMail object
SmtpMail.Send(mailObj)
End Sub
</SCRIPT>
<asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/>
<FORM METHOD="post" RUNAT="server">
Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>

在以上例子中,From(发件人)和 To(收件人)的Email地址是从相应的文本框中收集的,点击“Send Mail”(发送邮件)按钮时,邮件就被发送出去。当“Send Mail”(发送邮件)按钮被点击时,表单回递到它自己,在服务器上“SendMail”(发送邮件)程序被触发,邮件被发送。下面是使用C#的例子:

<%@page language="C#" %>
<%@Import Namespace="System.Web.Util" %>
<HTML><BODY>
<SCRIPT LANGUAGE="C#" RUNAT="server">
// This method is called on the server when the submit
// button is clicked on the client and when the page
// posts back to itself
public void SendMail (Object Obj, EventArgs E)
{
// Instantiate a MailMessage object. This serves as a message object
// on which we can set properties.
MailMessage mailObj = new MailMessage();
// Set the from and to address on the email
mailObj.From = Request.Form("From");
mailObj.To = Request.Form("To");
mailObj.Subject = "Subject Of the Mail";
mailObj.Body = "Body of the Mail";
// Optional: HTML format for the email
mailObj.BodyFormat = MailFormat.Html;
// Optional: Encoding for the message
mailObj.BodyEncoding = MailFormat.Base64;
// Optional: Set the priority of the message to high
mailObj.Priority = MailPriority.High;
// Optional: Attach a file to the email.
// Note here that we have created a MailAttachment object to
// attach a file to the email
mailObj.Attachments.Add(new MailAttachment("c://test.doc"));
// Send the email using the SmtpMail object
SmtpMail.Send(mailObj);
}
</SCRIPT>
<asp:label ID="Headingmsg" Text="Enter Your Email Address:" RUNAT="server"/>
<FORM METHOD="post" RUNAT="server">
Email Recipient: <INPUT TYPE="text" NAME="to"> <br>
Email Sender: <INPUT TYPE="text" NAME="from">
<INPUT TYPE="submit" NAME="Submit" VALUE="Send Mail" RUNAT="server" OnServerClick="SendMail">
</FORM>
</BODY>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值