|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。asp.net<P> 1、简介
在上篇中我们具体剖析过,.NET框架2.0版本供应了一个新的定名空间(System.Net.Mail)和一些发送电子邮件的新类(注重:.NET框架1.x版本中供应的定名空间System.Web.Mail及相干的类仍旧可使用,以完成向后兼容性)。并且,我们还具体剖析过怎样利用System.Net.Mail定名空间中的MailMessage和SmtpClient类来发送复杂的一般文本格局的电子邮件动静。
本篇将会商与电子邮件相干的更初级的选项。我们要剖析怎样发送HTML格局的电子邮件,怎样包含附件,和当发送一个电子邮件时怎样文雅地处置SMTP非常(比方有效的中继服务器凭据或假如该中继服务器处于离线形态)。
本文假定你已熟习从一个ASP.NET2.0web页面发送复杂的一般文本电子邮件;不然的话,请起首浏览本系列文章中的上篇。
2、发送HTML格局的电子邮件
在ASP.NET2.0中发送电子邮件时,我们已看到怎样发送一般文本电子邮件,这是经由过程把电子邮件内容赋给MailMessage类的Body属性完成的。实在,为了发送HTM格局的电子邮件,我们只需复杂地把Body属性设置为要发送的HTML内容,然后把MailMessage类的IsBodyHtml属性设置为True便可。
为了演示怎样发送一个HTML格局的动静,我创立了一个示例,其名字为HtmlEmail.aspx。代码以下:
(1)创立MailMessage实例
DimmmAsNewMailMessage(FromEmailAddress,ToEmailAddress)
(2)赋值MailMessage的属性
mm.Subject="HTML-FormattedEmailDemoUsingtheIsBodyHtmlProperty"
mm.Body="<h2>ThisisanHTML-FormattedEmailSendUsingthe<code>IsBodyHtml</code>Property</h2><p>IsntHTML<em>neat</em>?</p><p>Youcanmakeallsortsof<spanstyle=""color:red;font-weight:bold;"">prettycolors!!</span>.</p>"
mm.IsBodyHtml=True
(3)创立SmtpClient工具
DimsmtpAsNewSmtpClient
(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:25Jul200615:06:44-0700
subject:HTML-FormattedEmailDemoUsingtheIsBodyHtmlProperty
content-type:text/html;charset=us-ascii
content-transfer-encoding:quoted-printable
<h2>ThisisanHTML-FormattedEmailSendUsingthe<code>IsBodyHtml</code>=
Property</h2><p>IsntHTML<em>neat</em>?</p><p>Youcanmakeallsorts=
of<spanstyle=3D"color:red;font-weight:bold;">prettycolors!!</span>.</p>
提醒:察看发送到中继服务器的电子邮件内容
察看经由过程SmtpClient类发送到中继服务器的实践电子邮件内容是很风趣的(如下面如许),对不合错误?在上篇中,我们会商了怎样设置SmtpClient类以把电子邮件发送到一其中继服务器大概把它投进到一个指定的目次下。利用第二个选择时,我们可以切磋实践的电子邮件内容。你能够反省本文下载代码中的Web.config文件。个中,有一个加了正文的<smtp>元素,它展现了怎样设置该SmtpClient类以便把电子邮件的内容复制到一个指定的目次。
该电子邮件客户端(假定它撑持HTML格局的电子邮件)将在电子邮件内显现该HTML内容。以下图所示。
提醒:有关发送HTML格局的电子邮件的申明
当发送HTML格局的电子邮件时,必需了解你在你的屏幕看到的HTML大概与你的吸收者所看到的相称分歧。年夜多半的电子邮件客户端城市"剔除"潜伏伤害的HTML内容(比方ActiveX控件等),很多用户都制止JavaScript运转。<P> 3、包含附件
MailMessage类有一个Attachments属性,它是一个Attachment类实例的汇合。你可以把web服务器上的一个现有文件附加到电子邮件动静,或使附件的内容基于一个流(Stream)。为了展现利用附件发送电子邮件,我创立了一个演示程序,个中会见者可以添补一个回馈情势的表单以便把一个电子邮件发送到办理员。但是,这个回馈表单同意会见者从他们的盘算机当选择一个文件以便依靠到从该web页面发送的电子邮件中(这很象基于Web的电子邮件程序,如Hotmail,GMail,等等。当发送一个电子邮件时,它们同意你附加一个你的盘算机中的文件)。
为了同意会见者从他们的盘算机中附加一个文件,我们必要同意该用户把他们的盘算机中的一个文件上载到web服务器。这可使用FileUpload控件(这是ASP.NET2.0新增加的)来简单地完成。让我们来看一下这个演示程序顶用于创立用户接口的声明性语法:
<tableborder="0">
<tr>
<td><b>YourEmail:</b></td>
<td><asp:TextBoxrunat="server"ID="UsersEmail"Columns="30"></asp:TextBox></td>
</tr>
<tr>
<td><b>FiletoSend:</b></td>
<td>
<asp:FileUploadID="AttachmentFile"runat="server"/>
</td>
</tr>
<tr>
<tdcolspan="2">
<b>Body:</b><br/>
<asp:TextBoxrunat="server"ID="Body"TextMode="MultiLine"Columns="55"Rows="10"></asp:TextBox>
</td>
</tr>
<tr>
<tdcolspan="2"align="center">
<asp:Buttonrunat="server"ID="SendEmail"Text="SendFeedback"/>
</td>
</tr>
</table>
这个FileUpload控件天生一个<inputtype="file".../>HTML元素,它在扫瞄器中被显现为带有一个Browse按钮的一个文本框。当被点击时,一个对话框翻开以便用户可以从他们的盘算机当选择一个文件。
在填满回馈表单后,选择一个要上传的文件,而且点击"SendFeedback"按钮,则产生一个回寄,最初把选择文件的内容发送到web服务器。在"SendFeedback"按钮的点击事务处置器中,创立一个MailMessage工具,而且增加一个附件。因为该FileUpload供应一个到上传数据的Stream,以是,我们能够复杂地指向在这个Stream中的新的Attachment工具。我们不必要把上传文件保留到web服务器的文件体系。
确保已上传一个文件
IfString.IsNullOrEmpty(AttachmentFile.FileName)OrElseAttachmentFile.PostedFileIsNothingThen
ThrowNewApplicationException("Egad,afilewasntuploaded...youshouldprobablyusemoregracefulerrorhandlingthanthis,though...")
EndIf
(1)创立MailMessage实例
DimmmAsNewMailMessage(FromEmailAddress,ToEmailAddress)
(2)赋值MailMessage的属性
mm.Subject="EmailinganUploadedFileasanAttachmentDemo"
mm.Body=Body.Text
mm.IsBodyHtml=False
附加文件
mm.Attachments.Add(NewAttachment(AttachmentFile.PostedFile.InputStream,AttachmentFile.FileName))
(3)创立SmtpClient工具
DimsmtpAsNewSmtpClient
(4)发送MailMessage(将利用Web.config设置)
smtp.Send(mm)
在下面的代码示例中重载的Attachment机关器利用两个输出:一个对Stream(它包括要附加的数据)的援用,和要利用的附件名字。该FileUpload的FileName和FileName属性被使用于这两个值。
<P> 4、处置SMTP非常
当从一个ASP.NET页面发送电子邮件时,假如中继服务器封闭会产生甚么?假如认证信息利用有效,又会怎样呢?在呈现一个SMTP毛病时,SmtpClient类将抛出一个SmtpException非常。为了较好地处置如许的成绩,我们能够在发送电子邮件的代码中到场非常处置代码。假如呈现一个SmtpException,则我们可以显现一个更友爱的信息性的毛病提醒。
在本文的下载内容中,我包含了一个演示,它同意会见者指定要利用的中继服务器和认证信息。假如在试图发送一封电子邮件时存在一个毛病,那末将显现一个客户端告诫框,注释该成绩。为了测试这一点,关于一个必要认证的中继服务器,你能够输出一个有效的中继服务器主机名或有效的凭据。
Try
(1)创立MailMessage实例
DimmmAsNewMailMessage(FromEmailAddress,ToEmailAddress)
(2)赋值MailMessage的属性
mm.Subject="TestEmail...DONOTPANIC!!!1!!!111!!"
mm.Body="Thisisatestmessage..."
mm.IsBodyHtml=False
(3)创立SmtpClient工具
DimsmtpAsNewSmtpClient
SMTP设置...
smtp.Host=Hostname.Text
IfNotString.IsNullOrEmpty(Port.Text)Then
smtp.Port=Convert.ToInt32(Port.Text)
EndIf
IfNotString.IsNullOrEmpty(Username.Text)Then
smtp.Credentials=NewNetworkCredential(Username.Text,Password.Text)
EndIf
(4)发送MailMessage(将利用Web.config设置)
smtp.Send(mm)
显现一个客户端弹出窗口,注释该该邮件已收回
ClientScript.RegisterStartupScript(Me.GetType(),"HiMom!",String.Format("alert(Antestemailhassuccessfullybeensentto{0});",ToAddress.Replace("","")),True)
CatchsmtpExAsSmtpException
当发送电子邮件动静时产生了一个成绩
ClientScript.RegisterStartupScript(Me.GetType(),"OhCrap",String.Format("alert(Therewasaprobleminsendingtheemail:{0});",smtpEx.Message.Replace("","")),True)
CatchgeneralExAsException
产生别的的一些成绩
ClientScript.RegisterStartupScript(Me.GetType(),"OhCrap",String.Format("alert(Therewasageneralproblem:{0});",generalEx.Message.Replace("","")),True)
EndTry
这段代码捕捉SMTP特定的毛病动静和一般的非常(比方把有效电子邮件地点赋值给MailMessage工具的To或From属性)。在任何一种情形下,显现一个客户端告诫框以关照该用户有关该毛病的细节信息。
5、结论
在本文中,我们懂得了怎样发送HTML格局的电子邮件,利用附件发送电子邮件,和文雅地处置在发送一个电子邮件动静中产生的非常。发送一个HTML格局的电子邮件就象在Body属性中指定HTML内容而且把IsBodyHtml属性为设置True一样地复杂。真实的应战在于,确保HTML内容可以在盛行的电子邮件客户端按预期效果天生。为了把一个附件增加到一个电子邮件,只必要复杂地增加一个Attachment工具到MailMessage的附件汇合中。附件响应的数据能够来自于web服务器上的一个文件或来自于一个流。最初,为了处置SMTP级的非常,你能够增加利用SmtpClient类捕捉SmtpException抛出的非常处置代码。因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。 |
|