9

我有一个每晚运行的存储过程,它应该将查询结果发送给多个收件人。然而,在大多数日子里,它最终会在一分钟后发送一封重复的电子邮件。我正在使用的代码如下(所有电子邮件和数据库参考都已更改):

EXEC msdb.dbo.sp_send_dbmail
@recipients = 'email1@email.com',
@copy_recipients = 'email2@email.com;email3@email.com;email4@email.com',
@subject = 'Example Email',
@profile_name = 'ExampleProfile',
@query = 'SELECT name
    FROM table
    WHERE date BETWEEN (getdate() - 1) AND getdate()',
@attach_query_result_as_file = 1

对此的任何帮助将不胜感激。

4

8 回答 8

7

解决方案已证明是将服务器上的帐户重试帐户数减少到 0(在数据库邮件配置向导中)。

于 2013-04-26T13:20:40.213 回答
0

如果它没有从 SQL Server 发送两次并且邮件服务器也没有问题,那么请确保您没有在 Outlook 中使用邮件过滤器检查邮件,那么您可能会收到两次电子邮件。

于 2013-03-20T12:42:04.203 回答
0

发生这种情况是因为接收电子邮件的地址(在组中或个人中)的电子邮件地址不再有效。虽然您可以像接受的答案一样消除重试,但最好的方法是清理分布。

于 2014-09-24T17:15:52.940 回答
0

如果它向收件人发送重复的电子邮件,那么这意味着您的 SP 在一天内被多次调用。检查调用此 SP 的 SQL 作业中设置的调用时间。应该每天一次,以避免重复的电子邮件。

于 2013-03-20T11:10:04.327 回答
0

我建议您在数据库中添加另一个表,该表将保存有关上次向每个收件人发送电子邮件的时间的信息。

如果没有这样的表,您将无法真正知道发生了什么。如果您不小心多次运行 SP 怎么办?没有什么可以阻止它发送电子邮件。

关于这个问题——您的邮件服务器是否在已发送邮件中保留一份副本?如果是这样,您可能需要检查那里所有消息的发送日期。这可能会为您提供有关正在发生的事情的良好信息。

于 2013-03-22T08:30:36.417 回答
0

我有一个类似的问题,我们在一封电子邮件中有多个收件人,它会生成 2 封已发送的电子邮件。问题最终成为收件人之一不再有效,重试会将电子邮件发送给所有收件人,而不仅仅是失败的收件人。msdb 中有许多视图可以帮助您找到无效的收件人。他们启动 dbo.sysmail_<something>

这个问题有几个解决方案。

  1. 将每个收件人拆分为单独的电子邮件。
  2. 从列表中删除无效的收件人
  3. 将 DBMail 中的重试设置设置为 0
于 2014-12-16T17:16:25.903 回答
0

除了使用@body 和@subject 根据某些条件发送自定义文本之外,我在@query 中使用SELECT 语句在每封电子邮件的正文中发送常量文本时遇到了同样的重复问题。

一封电子邮件包含预期的自定义文本和查询文本。重复的电子邮件仅包含@query 文本(无自定义文本),系统插入的主题行为“SQL Server 消息”。

我运行了 SELECT * FROM msdb.dbo.sysmail_sentitems 并且确定发送了两次足够的电子邮件。查看 sysmail_configuration 发现 AccountRetryAttempts paramValue = 1。

在我从存储过程中完全删除@query(执行更改)后,问题就消失了,运行了 sp.query。然后我将@query 放回 sp,执行更改。在那之后,电子邮件只开始发送一次。去搞清楚。

于 2017-01-11T23:27:41.580 回答
0

确保在更新的侧面触发器中的任何其他触发器中没有任何其他更新语句。

即使我遇到了类似的问题,当我与触发器交叉检查时,我发现我在另一个触发器中使用了另一个 Update 语句。它导致触发器多次触发。因此触发了两封邮件。

于 2017-08-11T05:51:00.407 回答