转载 C#发送邮件高级篇 c 发送邮件

原文地址:C#发送邮件高级篇作者:斌斌一、简介

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

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

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

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

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

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

String FromAddress = "***@***.com";
//(1)创建MailMessage实例
MailMessage mm = new MailMessage(FromAddress,UsersEmail.Text);
mm.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
mm.SubjectEncoding =System.Text.Encoding.GetEncoding("gb2312");
//(2)属性MailMessage赋值
mm.Subject = Subject.Text;
mm.Body ="<b>粗体</b>";
mm.IsBodyHtml = true;
//(3)创建SmtpClient对象
SmtpClient smtp = new SmtpClient();
//(4)发送MailMessage(将使用Web.config设置)
smtp.Send(mm);

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

粗体

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

  观察通过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新添加的)来容易地实现。让我们来看一下这个演示程序中用于创建用户接口的声明性语法:

<form id="form1"runat="server">
<div>
<table border="0">
<tr>
<td>
<b>ToEmail:</b>
</td>
<td>
<asp:TextBox runat="server" ID="UsersEmail"Columns="30"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<b>Subject:</b>
</td>
<td>
<asp:TextBox runat="server" ID="Subject"Columns="30">
</asp:TextBox>
</td>
</tr>
<tr>
<td>
<strong>Attachment:</strong></td>
<td>
<asp:FileUpload ID="FileUpload1" 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">
[转载]C#发送邮件高级篇 c 发送邮件
<asp:Button runat="server" ID="SendEmail"Text="Send" OnClick="SendEmail_Click" />
</td>
</tr>
</table>
</div>
</form>

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


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

String FromAddress = "***@***.com";
//(1)创建MailMessage实例
MailMessage mm = new MailMessage(FromAddress,UsersEmail.Text);
mm.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
mm.SubjectEncoding =System.Text.Encoding.GetEncoding("gb2312");
//(2)属性MailMessage赋值
mm.Subject = Subject.Text;
mm.Body ="<b>粗体</b>";
mm.IsBodyHtml = true;
mm.Attachments.Add(newAttachment(FileUpload1.PostedFile.InputStream,FileUpload1.FileName));
//(3)创建SmtpClient对象
SmtpClient smtp = new SmtpClient();
//(4)发送MailMessage(将使用Web.config设置)
smtp.Send(mm);

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

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

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

try
{
String FromAddress = "***@***.com";
//(1)创建MailMessage实例
MailMessage mm = new MailMessage(FromAddress,UsersEmail.Text);
mm.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
mm.SubjectEncoding =System.Text.Encoding.GetEncoding("gb2312");
//(2)属性MailMessage赋值
mm.Subject = Subject.Text;
mm.Body ="<b>粗体</b>";
mm.IsBodyHtml = true;
mm.Attachments.Add(newAttachment(FileUpload1.PostedFile.InputStream,FileUpload1.FileName));
//(3)创建SmtpClient对象
SmtpClient smtp = new SmtpClient();
//(4)发送MailMessage(将使用Web.config设置)
smtp.Send(mm);
}
catch (SmtpException smtpEr)
{
Response.Write(string.Format("<ScriptLanguage='javascript'>alert('There was a problem insending the email:{0}')</Script>",smtpEr.Message));
}
catch (Exception err)
{
Response.Write(string.Format("<ScriptLanguage='javascript'>alert('There was a generalproblem:{0}')</Script>",err.Message));
}

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


  五、结论

  在本文中,我们了解了如何发送HTML格式的电子邮件,使用附件发送电子邮件,以及优雅地处理在发送一个电子邮件消息中发生的异常。发送一个HTML格式的电子邮件就象在Body属性中指定HTML内容并且把IsBodyHtml属性为设置True一样地简单。真正的挑战在于,确保HTML内容能够在流行的电子邮件客户端按预期效果生成。为了把一个附件添加到一个电子邮件,只需要简单地添加一个Attachment对象到MailMessage的附件集合中。附件相应的数据可以来自于web服务器上的一个文件或来自于一个流。最后,为了处理SMTP级的异常,你可以添加使用SmtpClient类捕获SmtpException抛出的异常处理代码。

  

爱华网本文地址 » http://www.aihuau.com/a/25101010/27068.html

更多阅读

转载 C语言:随机函数rand()、srand()、random()和rando

原文地址:C语言:随机函数rand()、srand()、random()和randomized()的区别和用法作者:猎空声明一点:在VC++中,没有random()和randomize()函数,只有rand()和srand()函数。其中,random()和randomize()函数的使用的方法分别与rand()和srand()

转载 布花染色——材料篇 天刀染色材料怎么获得

原文地址:布花(染色——材料篇)作者:katty终于开始讲布花染色部分了。最近手工重点又偏移到别的方面去了,所以得费点劲再把思路拉回到“布花”状态。然后说一句既矫情又欠揍的话:会太多手艺真是让人困扰,都不知道该做啥好(顶铁锅迅速开溜~~)

转载 小破文章一篇 如何转载微信原创文章

原文地址:小破文章一篇作者:韩寒(回头检查了一下文章,我发现人真的不能和小人动气,会直接降低你的产品质量和智商。因为一直有人在诽谤说我的文章不是自己写的,或者我幕后有团队帮我策划帮我创作并推广,我无法证明我没有做过的事情,所以从来

转载 道学通论·仙学篇 62篇精彩的古文 转载

原文地址:道学通论·仙学篇作者:崂山道人道学通论·仙学篇第一章道教中的神灵和仙真道教的根本信仰是对“道”的信仰,因之道教的神性论也是对道性论的神化。根据“一切存形皆含道性”的命题,道教中出现了一批对天、地、日、月、星、山

声明:《转载 C#发送邮件高级篇 c 发送邮件》为网友龙殿霸者分享!如侵犯到您的合法权益请联系我们删除