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

本文关键字:电子邮件 更好 触发器 net SQL 使用 | 更新日期: 2023-09-27 17:49:41

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

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

我想在后台发送电子邮件。如果存在任何邮件连接超时,则电子邮件方法将重试发送电子邮件,时间可能为一两分钟。我正在考虑使用SQL邮件来实现这一点。但我不确定这是否是最好的解决方案。

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

您有几个选择:

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

  2. 从您的web应用程序中使用异步电子邮件方法,例如SmtpMail.SendAsync()。这将允许您在不阻碍用户(或与用户交互)的情况下处理错误,但它不是持久的。如果web进程重新启动,操作将丢失。

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

使用SendAsync()的选项#2将是最快实现的。根据你的需要,这可能就足够了。

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

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

在。net应用程序中管理超时。如果触发器中出现问题或超时,则可能无法提交数据。而是让数据库完成数据事务,然后从。net应用程序检查状态。

我认为没有一个明确的答案,但这是我的首选。