哪个更好使用.net或SQL表中的触发器发送电子邮件

时间:2012-12-27 05:18:53

标签: c# .net sql sql-server

我们有这个模块,用户可以注册,他们需要确认他们的电子邮件地址。

目前我使用.NET发送电子邮件。所以在添加记录后,我现在将调用我的电子邮件方法。但我注意到有时电子邮件功能确实收到超时错误,因为我捕获所有异常,这个错误会呈现给用户。

我想要的是在后台发送电子邮件。如果有任何邮件连接超时,电子邮件方法将只重试发送电子邮件大概一两分钟。 我正在考虑使用SQL邮件来实现这一目标。但我不确定它是否是最好的解决方案。

2 个答案:

答案 0 :(得分:5)

您有几个选择:

  1. 使用SQL Server Database Mail执行电子邮件排队和发送周围的繁重工作。应用程序仍将负责构造消息并将其发送到数据库。通过单独的SMTP服务器中继(直接在SQL计算机上安装SMTP服务可能不是一个好主意)。

  2. 从您的网络应用中使用async email methods,例如SmtpMail.SendAsync()。这将允许您在不占用用户(或与用户交互)的情况下处理错误,但它不耐用。如果您的Web进程重新启动,则操作将丢失。

  3. 使用Windows服务。这将是一个简单的单独应用程序,它只是监视数据库中的新电子邮件任务和/或从Web应用程序发送需要执行任务的消息。

  4. 使用SendAsync()的选项#2将是最快的实施方式。根据您的需要,这可能就足够了。

    选项#1不需要太多努力。当您需要围绕收件人列表和电子邮件内容实现复杂的业务逻辑时,选项#3真的很棒。也可以将选项#1和#3结合起来(参见评论中@RemusRusanu和我之间的对话)。

    使用选项#1和#3,如果环境出现故障,服务重新启动或发生错误,您将不会丢失任何数据或无法发送电子邮件。

答案 1 :(得分:0)

而是管理.net应用程序中的超时。如果触发器中存在问题或超时,则可能无法提交数据。而是允许DB完成数据事务,并从.net应用程序检查状态。

我认为没有明确的答案,但这是我的偏好。