首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > 邮件与程序开发 > ASP.NET 2.0发送电子邮件全面剖析之二 > 正文

ASP.NET 2.0发送电子邮件全面剖析之二

出处:天极网 作者:朱先忠编译 时间:2006-9-25 9:36:00
一、简介

  在上篇中我们详细分析过,.NET框架2.0版本提供了一个新的命名空间(System.Net.Mail)和一些发送电子邮件的新类(注意:.NET框架1.x版本中提供的命名空间System.Web.Mail及相关的类仍然可以使用,以实现向后兼容性)。而且,我们还详细分析过如何使用System.Net.Mail命名空间中的MailMessage和SmtpClient类来发送简单的普通文本格式的电子邮件消息。

  本篇将讨论与电子邮件相关的更高级的选项。我们要分析如何发送HTML格式的电子邮件,如何包括附件,以及当发送一个电子邮件时如何优雅地处理SMTP异常(例如无效的中继服务器凭证或如果该中继服务器处于离线状态)。

  本文假定你已经熟悉从一个ASP.NET 2.0 web页面发送简单的普通文本电子邮件;否则的话,请首先阅读本系列文章中的上篇。

  二、发送HTML格式的电子邮件

  在ASP.NET 2.0中发送电子邮件时,我们已经看到如何发送普通文本电子邮件,这是通过把电子邮件内容赋给MailMessage类的Body属性实现的。其实,为了发送HTM格式的电子邮件,我们只要简单地把Body属性设置为要发送的HTML内容,然后把MailMessage类的IsBodyHtml属性设置为True即可。

  为了演示如何发送一个HTML格式的消息,我创建了一个示例,其名字为HtmlEmail.aspx。代码如下:

'(1)创建MailMessage实例
Dim mm As New MailMessage(FromEmailAddress, ToEmailAddress)
'(2)赋值MailMessage的属性
mm.Subject = "HTML-Formatted Email Demo Using the IsBodyHtml Property"
mm.Body = "<h2>This is an HTML-Formatted Email Send Using the <code>IsBodyHtml</code> Property</h2><p>Isn't HTML <em>neat</em>?</p><p>You can make all sorts of <span style=""color:red;font-weight:bold;"">pretty colors!!</span>.</p>"
mm.IsBodyHtml = True
'(3) 创建SmtpClient对象
Dim smtp As New SmtpClient
'(4)发送MailMessage (将使用Web.config设置)
smtp.Send(mm)

  如你所见,简单地把Body属性设置为要发送的HTML内容,并且把IsBodyHtml属性设置为True。至此,所有这些你已经完成!被发送到中继服务器的实际电子邮件内容(并且最后要到达接收者的电子邮件客户端)看上去如下所示:

x-sender: ToEmailAddress
x-receiver: FromEmailAddress
mime-version: 1.0
from: FromEmailAddress
to: ToEmailAddress
date: 25 Jul 2006 15:06:44 -0700
subject: HTML-Formatted Email Demo Using the IsBodyHtml Property
content-type: text/html; charset=us-ascii
content-transfer-encoding: quoted-printable
<h2>This is an HTML-Formatted Email Send Using the <code>IsBodyHtml</code>=
Property</h2><p>Isn't HTML <em>neat</em>?</p><p>You can make all sorts=
of <span style=3D"color:red;font-weight:bold;">pretty colors!!</span>.</p>

  提示:观察发送到中继服务器的电子邮件内容

  观察通过SmtpClient类发送到中继服务器的实际电子邮件内容是很有趣的(如上面这样),对不对?在上篇中,我们讨论了如何配置SmtpClient类以把电子邮件发送到一个中继服务器或者把它投入到一个指定的目录下。使用第二个选择时,我们能够探讨实际的电子邮件内容。你可以检查本文下载代码中的Web.config文件。其中,有一个加了注释的<smtp>元素,它展示了如何配置该SmtpClient类以便把电子邮件的内容复制到一个指定的目录。

  该电子邮件客户端(假定它支持HTML格式的电子邮件)将在电子邮件内显示该HTML内容。如下图所示。


  提示:有关发送HTML格式的电子邮件的说明

  当发送HTML格式的电子邮件时,必须理解你在你的屏幕看到的HTML可能与你的接收者所看到的相当不同。大多数的电子邮件客户端都会"剔除"潜在危险的HTML内容(例如ActiveX控件等),许多用户都阻止JavaScript运行。
三、包括附件

  MailMessage类有一个Attachments属性,它是一个Attachment类实例的集合。你能够把web服务器上的一个现有文件附加到电子邮件消息,或使附件的内容基于一个流(Stream)。为了展示使用附件发送电子邮件,我创建了一个演示程序,其中访问者能够填充一个回馈形式的表单以便把一个电子邮件发送到管理员。然而,这个回馈表单允许访问者从他们的计算机中选择一个文件以便依附到从该web页面发送的电子邮件中(这很象基于Web的电子邮件程序,如Hotmail,GMail,等等。当发送一个电子邮件时,它们允许你附加一个你的计算机中的文件)。

  为了允许访问者从他们的计算机中附加一个文件,我们需要允许该用户把他们的计算机中的一个文件上载到web服务器。这可以使用FileUpload控件(这是ASP.NET2.0新添加的)来容易地实现。让我们来看一下这个演示程序中用于创建用户接口的声明性语法:

<table border="0">
<tr>
<td><b>Your Email:</b></td>
<td><asp:TextBox runat="server" ID="UsersEmail" Columns="30"></asp:TextBox></td>
</tr>
<tr>
<td><b>File to Send:</b></td>
<td>
<asp:FileUpload ID="AttachmentFile" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<b>Body:</b><br />
<asp:TextBox runat="server" ID="Body" TextMode="MultiLine" Columns="55" Rows="10"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button runat="server" ID="SendEmail" Text="Send Feedback" />
</td>
</tr>
</table>

  这个FileUpload控件生成一个<input type="file" ... />HTML元素,它在浏览器中被显示为带有一个Browse按钮的一个文本框。当被点击时,一个对话框打开以便用户能够从他们的计算机中选择一个文件。

点击放大此图片

  在填满回馈表单后,选择一个要上传的文件,并且点击"Send Feedback"按钮,则发生一个回寄,最后把选择文件的内容发送到web服务器。在"Send Feedback"按钮的点击事件处理器中,创建一个MailMessage对象,并且添加一个附件。由于该FileUpload提供一个到上传数据的Stream,所以,我们可以简单地指向在这个Stream中的新的Attachment对象。我们不需要把上传文件保存到web服务器的文件系统。

'确保已经上传一个文件
If String.IsNullOrEmpty(AttachmentFile.FileName) OrElse AttachmentFile.PostedFile Is Nothing Then
 Throw New ApplicationException("Egad, a file wasn't uploaded... you should probably use more graceful error handling than this, though...")
End If
'(1) 创建MailMessage实例
Dim mm As New MailMessage(FromEmailAddress, ToEmailAddress)
'(2)赋值MailMessage的属性
mm.Subject = "Emailing an Uploaded File as an Attachment Demo"
mm.Body = Body.Text
mm.IsBodyHtml = False
'附加文件
mm.Attachments.Add(New Attachment(AttachmentFile.PostedFile.InputStream, AttachmentFile.FileName))
'(3) 创建SmtpClient对象
Dim smtp As New SmtpClient
'(4)发送MailMessage (将使用Web.config设置)
smtp.Send(mm)

  在上面的代码示例中重载的Attachment构造器使用两个输入:一个对Stream(它包含要附加的数据)的引用,以及要使用的附件名字。该FileUpload的FileName和FileName属性被应用于这两个值。

  四、处理SMTP异常

  当从一个ASP.NET页面发送电子邮件时,如果中继服务器关闭会发生什么?如果认证信息使用无效,又会怎么样呢?在出现一个SMTP错误时,SmtpClient类将抛出一个SmtpException异常。为了较好地处理这样的问题,我们可以在发送电子邮件的代码中加入异常处理代码。如果出现一个SmtpException,则我们能够显示一个更友好的信息性的错误提示。

  在本文的下载内容中,我包括了一个演示,它允许访问者指定要使用的中继服务器以及认证信息。如果在试图发送一封电子邮件时存在一个错误,那么将显示一个客户端警告框,解释该问题。为了测试这一点,对于一个需要认证的中继服务器,你可以输入一个无效的中继服务器主机名或无效的凭证。

Try
 '(1)创建MailMessage实例
 Dim mm As New MailMessage(FromEmailAddress, ToEmailAddress)
 '(2)赋值MailMessage的属性
 mm.Subject = "Test Email... DO NOT PANIC!!!1!!!111!!"
 mm.Body = "This is a test message..."
 mm.IsBodyHtml = False
 '(3)创建SmtpClient对象
 Dim smtp As New SmtpClient
 'SMTP设置...
 smtp.Host = Hostname.Text
 If Not String.IsNullOrEmpty(Port.Text) Then
  smtp.Port = Convert.ToInt32(Port.Text)
 End If
 If Not String.IsNullOrEmpty(Username.Text) Then
  smtp.Credentials = New NetworkCredential(Username.Text, Password.Text)
 End If
 '(4)发送MailMessage(将使用Web.config设置)
 smtp.Send(mm)
 '显示一个客户端弹出窗口,解释该该邮件已经发出
 ClientScript.RegisterStartupScript(Me.GetType(), "HiMom!", String.Format("alert('An test email has successfully been sent to {0}');", ToAddress.Replace("'", "\'")), True)
 Catch smtpEx As SmtpException
  '当发送电子邮件消息时发生了一个问题
  ClientScript.RegisterStartupScript(Me.GetType(), "OhCrap", String.Format("alert('There was a problem in sending the email: {0}');", smtpEx.Message.Replace("'", "\'")), True)
 Catch generalEx As Exception
  '发生另外的一些问题
  ClientScript.RegisterStartupScript(Me.GetType(), "OhCrap", String.Format("alert('There was a general problem: {0}');", generalEx.Message.Replace("'", "\'")), True)
End Try

  这段代码捕获SMTP特定的错误消息和普通的异常(例如把无效电子邮件地址赋值给MailMessage对象的To或From属性)。在任何一种情况下,显示一个客户端警告框以通知该用户有关该错误的细节信息。


  五、结论

  在本文中,我们了解了如何发送HTML格式的电子邮件,使用附件发送电子邮件,以及优雅地处理在发送一个电子邮件消息中发生的异常。发送一个HTML格式的电子邮件就象在Body属性中指定HTML内容并且把IsBodyHtml属性为设置True一样地简单。真正的挑战在于,确保HTML内容能够在流行的电子邮件客户端按预期效果生成。为了把一个附件添加到一个电子邮件,只需要简单地添加一个Attachment对象到MailMessage的附件集合中。附件相应的数据可以来自于web服务器上的一个文件或来自于一个流。最后,为了处理SMTP级的异常,你可以添加使用SmtpClient类捕获SmtpException抛出的异常处理代码。
相关文章 热门文章
  • 深入解析ASP.NET中实现发送电子邮件
  • ASP.NET 2.0发送电子邮件中存在的问题
  • ASP.NET 2.0中发送电子邮件剖析之一
  • 用C++ Builder实现电子邮件群发
  • 用Cdonts实现发送Email
  • Jmail的主要参数列表
  • ASP.NET 2.0发送电子邮件全面剖析之二
  • VC++ SMTP协议电子邮件传送剖析
  • 通过sina的smtp验证的Java发送邮件源代码
  • ASP.NET 2.0中发送电子邮件剖析之一
  • 在Asp.Net中使用SmtpMail发送邮件的方法
  • .NET环境下Email的技术介绍
  • ASP.NET 2.0发送电子邮件中存在的问题
  • 用ASP判断Email地址是否有效
  • IIS如何接收ServerXMLHTTP传过来的编码字符?
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号