1

我有一个SQL Server数据库在几个ASP.NET(VB.NET)网站之间共享,数据库有一个存储客户查询的表格 - 我希望提供电子邮件通知,通知新的查询,以关联组织内的人员并且可能会将一些查询数据放入电子邮件的正文中)。请有人可以概述我的选择方面如何实施?SQL Server发送电子邮件通知插入到表中的数据 - 选项?

我的想法是:

  1. 的SQLMail
  2. 数据库邮件
  3. VB.NET使用System.Net.Mail库存储过程?
  4. 其他选项?

选项3似乎是可取的,因为我知道如何在VB.NET中做到这一点,它是微不足道的。

  • 我的其他选择是什么?
  • 有什么注意事项?
  • 我可以做到这一点,即触发器(插入量低)?
  • 或者是否至关重要,这是在一个批次即作业中完成的?

任何帮助非常欢迎! 谢谢。

+0

什么是数据库邮件的拦截器?当然这比CLR更容易设置。 – 2012-03-21 23:13:55

+0

我已经对数据库邮件做了一些研究,但我不确定是否需要连接到电子邮件服务器来发送电子邮件 - 如果是这种情况,那么我不能这样做,因为它与我们的Web服务器是分开的。我熟悉如何从VB.NET发送电子邮件,因为我们在一个ASP.NET(VB.NET)网站上执行此操作,并且发件人实际上是“欺骗”的,但它不是垃圾邮件,因为它是内部的,DNS记录包含网络服务器的IP地址! – 2012-03-21 23:20:24

+0

您可以在任何服务器(包括SQL Server框或Web服务器上)上设置简单的SMTP服务器。如果您不想使用IIS功能,则还有其他轻量级解决方案可用。您的VB.NET代码最终还是必须连接到SMTP服务器,为什么SQL Server无法连接到同一个SMTP服务器? – 2012-03-21 23:22:16

回答

5

在1),2)和3)之间唯一值得考虑的是2)。 1)是一个死胎,使用一个不合时宜的特征,因为它的问题和问题而臭名昭着。 3)是一个坏主意,因为它破坏了事务一致性(即使插入回滚,也会发送SMTP邮件),并且由于调用者(可能是您的网页正在呈现)必须等到SMTP交换完成(即同步)。只有2)提供事务一致性并且是异步的(在SMTP完成之前不阻止调用者)。

通常,尽管这样的任务最好委派给Reporting Services任务。您将创建一个Data-Driven subscriptionemail delivery。这可以即装即用,无需重新发明轮子。

+0

感谢您的回复。它绝对需要异步!即使交易回滚,我也不担心发送的电子邮件 - 这是不受欢迎的,但它不会在公司内造成问题。所以选项2看起来是最好的选择。我有几个问题,但我认为我们只有SQL Server标准版,并且我无法连接到电子邮件服务器来发送电子邮件 - 我必须“欺骗”发件人,但它不是垃圾邮件,因为它只是内部的, DNS电子邮件记录确实有服务器IP地址。 – 2012-03-21 23:01:06

+0

你说3)是坏的,因为即使插入被回滚,SMTP邮件也被发送。与2)有什么不同?也就是说,我同意你的看法,但是你认为这听起来像是对于3)而言,但没有其他选择。 – 2012-03-21 23:15:10

+0

@Aaron:数据库邮件将'邮件'作为Service Broker消息发送到'[msdb]'中的db邮件队列中。如果事务提交,则“数据库邮件”外部代理拾取并传递“消息”。如果它回滚,则SSB消息将回滚并且数据库邮件代理永远不会看到它。这在http://technet.microsoft.com/en-us/library/ms175887.aspx中描述。 – 2012-03-21 23:26:49

1

我也曾与此类似的情况,我解决的解决方案是让C#windows服务每分钟检查一次SQL服务器作业队列。这个工作队列将包括诸如发送电子邮件之类的工作。然后,您可以在桌面上使用TRIGGER插入一个新的“电子邮件警报”作业,该作业将在下一个周期中获得。

+0

听起来很复杂,我会这样做,如果我知道如何 - 是不是有一个更简单,但同样安全的选择? – 2012-03-21 22:40:44

+0

你的选择3,使用CLR存储过程是我能想到的唯一另外一种方式,CLR过程可能与我上面的建议一样难以实现。一个更简单的版本将是一个控制台应用程序,它也检查SQL Server中的“JobQueue”表,并使用Windows调度程序每分钟运行一次。 – 2012-03-21 22:46:25

+0

为什么控制台应用程序比调用数据库邮件的简单SQL Server代理作业更简单?更多的运动部件=更多的失败点。依赖任务调度器(直到W8才真正集群)可能并不是更好或更简单的IMHO。 – 2012-03-21 23:21:34