在 Asp.net 中发送电子邮件






1.60/5 (2投票s)
在 Asp.net 应用程序中,发送电子邮件非常常见。 在大多数 asp.net 应用程序中,我被要求向客户或管理员等发送电子邮件。 同时,
在 ASP.NET 应用程序中,发送电子邮件是非常常见的任务。 在大多数 ASP.NET 应用程序中,我被要求向客户或管理员等发送电子邮件。 同时,我几乎总是被要求多次更改电子邮件的内容。 比如更改一句话,在句子之间加上空格。 有时为了按照客户的需求创建电子邮件,我不得不更改电子邮件内容 10 次。 最后,我得出了一个想法,我需要使这个过程可配置,并允许客户自己轻松更改内容。 另一个问题是,由于电子邮件依赖于其他因素,如邮件服务器,有时您的应用程序可能无法成功发送电子邮件,因此您需要在后续步骤中检测未成功的电子邮件并发送电子邮件。 本文将讨论向客户发送电子邮件的最佳实践。 下载代码
了解问题
我们将向用户发送电子邮件。 我们需要这些功能
-
电子邮件内容应该是可配置的
-
我们可能需要在我们的电子邮件中添加一个指向我们站点或其他站点中某个位置的链接
-
如果发送电子邮件不成功,我们需要将该电子邮件记录到数据库中,以便将来能够发送电子邮件
您可以使用 System.Web.Mail.SmtpMail 在 .net 中发送电子邮件,该方法已过时。 也可以使用 System.Net.Mail.SmtpClient。 我强烈推荐第二个。 另外,尽量使用 System.Net.MailMessage,它是 .NET 2.0 中的一个新类,除非您仍然使用 .NET 1.1 通过使用 SmtpClient 类,您可以在 web.config 中配置您的 smtp 服务器信息。 看看这段代码
快速查看类图
我需要提醒您,我在这里没有使用多层架构。 我强烈建议通过 DataAccessLayer 访问数据库。
EmailHelper、EmailLog、EmailLogProvider、DataAccessHelper
在这种情况下,我将调用 EmailHelper 类的 方法来发送电子邮件,如果我们有 10 封不同的电子邮件(当然内容不同),那么我将有 10 种发送电子邮件的方法。 所有这 10 种方法都将使用 SendEmail 方法(一个私有方法)来发送电子邮件。 此外,在这个类中还有另一种方法,称为 LogException,用于将异常记录到数据库中。 同时,电子邮件信息被保存,因此我们可以在后续步骤中向客户发送电子邮件。 在此方法中,创建一个电子邮件日志对象,然后将其传递给 EmailLogProvider 的 Insert 方法以插入到数据库中。 DataAccessHelper 是一个实用程序类,您可以使用它向命令添加参数并运行存储过程。 在我们的示例中,它被 EmailLogProvider 类使用。 EmailReader、EmailLinkLoader:当调用 EmailHelper 的方法发送电子邮件时,首先创建一个 MailMessage 对象,然后将其传递给 EmailReader 类以准备正文和其他信息。 在此方法中,我们从 XML 文件加载信息。 因此,它具有高度的可维护性,因为只要客户返回给我们更改电子邮件的内容,我们就可以将这些更改应用到这个 XML 文件中,而不是我们的代码中。 看看这个 XML 文件。
<?xml version="1.0" encoding="utf-8" ?> <Email> <subject>Thank you for registering in CsharpCourses</subject> <body> <![CDATA[ Dear $firstName$ <p>Thank you for registering with Csharpcourses. </p> <p>We are happy to offer you free csharp training. </p> <p>Please note you are bound by the $TandCLink$ of this website. Should you have any trouble with Courses, please contact csharpcourses support on (02) xxxx xxxx.</p> <p>Kind regards,<br/><br/> Csharpcourses Support Group </p> ]]> </body> <fromEmail>Support@CsharpCourses.com</fromEmail> <fromEmailName>CshaarpCourses Support</fromEmailName> <bcc>emad@CsharpCourses.com;Support@CsharpCourses.com</bcc> </Email>
正如您所看到的,我们甚至有 "fromEmail" 和 "fromEmailName" 以及尽可能多的 bcc 电子邮件可以配置。 此代码中一个非常好的技巧是,如果您仔细查看 xml 文件,您会发现 $firstName$
。 这是我们代码的键,我们将在 EmailLoader.LoadRegistration 中替换此值。 因此,电子邮件可以包含动态信息,例如,另一个很好的例子是您可能希望向用户发送用户名和密码,但此信息可能因用户而异,因此我们使用其他键,并且我们在代码中以与 $firstName$
完全相同的方式替换此信息。 在我工作过的大多数站点中,我都有多个电子邮件,并且其中许多电子邮件都有一些特殊链接,例如应放置在电子邮件中的条款和条件链接。 良好的做法总是建议,只要您有多个电子邮件内容连接到同一链接,就永远不要将链接硬编码。 因此,想象一下您有 5 封电子邮件,并且它们的内容中的某个位置都有一个指向条款和条件的链接。 您最好使此链接可配置,因为当此链接更改时,您只需要更改一个配置,而不是在所有电子邮件中查找此链接。 因此,EmailLinkLoader 实际上会加载另一个 xml 文件并找到链接地址,然后缓存此信息。 因此,下次它不需要再次查找链接。 此链接信息将传递给 EmailReader 以应用于正文内容。
<?xml version="1.0" encoding="utf-8" ?> <links> <TandCLink> <a href='http://www.CshaarpCourses.com/TandC.aspx'>terms and conditions</a> </TandCLink> </links>
重要提示(如何运行代码)
打开 Visual Studio 并在文件菜单中选择打开网站,然后从文件系统中选择项目文件夹。 之后,您可以运行该项目。 您需要应用 smtpserver 地址。 一个好的测试方法是在不应用 smtpserver 的情况下运行应用程序,然后应用程序会要求您的名字和您的电子邮件地址。 之后,由于发送电子邮件不成功,电子邮件信息将保存到数据库中。 并且它会向您显示不成功的消息。 在后续步骤中,我们可以使用 EmailLogProvider 类并加载所有 EmailLog 对象,以便我们可以重试并重新发送电子邮件。
用于发送电子邮件的现成可重用类