使用SP_SEND_DBMAIL向所有收件人发送重复电子邮件的存储过程



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

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

如果有任何帮助,我将不胜感激

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

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

我有一个类似的问题,我们有多个收件人在一个单一的电子邮件,它会产生2个发送的电子邮件。问题最终是其中一个收件人不再有效,并且重试将向所有收件人发送电子邮件,而不仅仅是失败的收件人。msdb中有许多视图可以帮助您找到无效的收件人。它们以dbo.sysmail_

开头

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

  1. 将每个收件人划分为单独的电子邮件。
  2. 从列表中删除无效收件人
  3. 将DBMail中的重试设置设置为0

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

一封电子邮件同时包含自定义文本和查询文本。重复的电子邮件只包含@query文本(没有自定义文本)和系统插入的主题行"SQL Server Message"。

我运行SELECT * FROM msdb.dboSysmail_sentitems和足够的电子邮件被发送两次。查看sysmail_configuration,发现AccountRetryAttempts paramValue = 1.

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

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

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

我建议您在数据库中添加另一个表,以保存最后一次向每个收件人发送电子邮件的时间。

没有这样的表格,你不能真正知道发生了什么。如果你不小心运行了SP多次呢?没有什么可以阻止它发送电子邮件。

关于这个问题——你的邮件服务器在发送的邮件中保留副本吗?如果是,你可能需要检查所有邮件的发送日期。这可能会给你一个很好的信息发生了什么

确保在任何其他触发器中没有任何其他Update语句。

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

相关内容

  • 没有找到相关文章

最新更新