【发布时间】:2010-10-02 11:02:29
【问题描述】:
我希望我的 asp.net mvc 框架系统在每次触发某个操作(在某个控制器内)时发送一封电子邮件。是否有任何第三方库或 .net 标准方法来实现这一点?
【问题讨论】:
标签: asp.net visual-studio-2008 email
我希望我的 asp.net mvc 框架系统在每次触发某个操作(在某个控制器内)时发送一封电子邮件。是否有任何第三方库或 .net 标准方法来实现这一点?
【问题讨论】:
标签: asp.net visual-studio-2008 email
嗯,使用 .NET 发送电子邮件并不难。您可以从您的操作中发送邮件。
但是,我认为我们在这里很少谈论日志记录,而对于日志记录,有一系列第三方库。我知道有一个叫 Log4Net。
这些日志框架中的大多数都可以配置日志的存储方式,并且可能还可以配置在记录某些内容时发送电子邮件。
但在您的场景中,它只会编写一个简单的邮件函数,当用户输入操作时发送邮件。你可以看看:http://www.developer.com/net/asp/article.php/3096831 - 它是一个使用 .NET 发送邮件的演示 - 虽然是 webforms,但基本的东西仍然适用于 MVC。
【讨论】:
SmtpClient 类和其他 System.Net.Mail 类可以很容易地从任何 .NET 程序中用于发送邮件。您只需将其指向一个可用且愿意的SMTP 服务器。
【讨论】:
更新的方法是使用System.Net.Mail - 这是 System.Web.Mail 的 2.0 替代品。
类似的东西,从 BaseController(如果有其他控制器需要它)调用的实际控制器。
我在静态类中有以下代码来处理从服务器发送简单的纯文本项目:
internal static void SendEmail(MailAddress fromAddress, MailAddress toAddress, string subject, string body)
{
var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
};
var client = new SmtpClient("smtpServerName");
client.Send(message);
}
显然,您可能希望在其中进行一些错误处理等 - 例如,如果服务器拒绝连接,Send 可能会引发异常。
【讨论】:
创建一个 BaseController,所有其他控制器都从该控制器继承。 在 BaseController 中覆盖 OnActionExecuted 方法并插入您的代码以发送电子邮件。
public class BaseController : Controller
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Send mail here
base.OnActionExecuted(filterContext);
}
}
【讨论】: