[英]Stored procedure using SP_SEND_DBMAIL sending duplicate emails to all recipients

I have a stored procedure that is run every night which is supposed to send the results of a query to several recipients. However on most days it ends up sending a duplicate email a minute later. The code I am using is as follows (all emails and database refs have been changed):


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

Any help with this would be greatly appreciated.


8 个解决方案



The solution has turned out to be reducing the number of Account Retry Account on the server to 0 (within the Database Mail Configuration Wizard).




If it is sending duplicate emails to recipients then that means your SP is being called multiple times in a day. Check calling time set in your SQL job which is calling this SP. It should be once in a day to avoid duplicate emails.




If it is not being sent twice from SQL Server and not a problem of Mail Server as well, then make sure you're not checking mail in Outlook with filters for mail, then you may get the email twice.

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



I’d suggest you add another table to your database that will hold the info on when was the last time an email sent to each recipient.


Without such table you can’t really know what’s going on. What if you run the SP multiple times by accident? There is nothing that will prevent it from sending an email.


Regarding this problem – does your mail server keep a copy in sent items? If it does you might want to check send date for all messages there. This might give you a good info on what’s going on.

关于此问题 - 您的邮件服务器是否在已发送的项目中保留副本?如果是,您可能需要检查所有邮件的发送日期。这可能会为您提供有关正在发生的事情的详细信息。



This occurs because an address receiving the email (either in a group, or individual) has an email address that is no longer valid. While you can eliminate retries as in the accepted answer, the best approach is to clean up the distribution.




I had a similar issue where we had multiple recipients in a single email, and it would generate 2 sent emails. The issue ended up being one of the recipients was no longer valid, and the retry would send the email to all recipients, not just the one that failed. There are a number of views in msdb that can help you find your invalid recipient. They start dbo.sysmail_<something>

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

There are a couple of solutions to this issue.


  1. Break out each recipient as a separate email.
  2. 将每个收件人分成单独的电子邮件。
  3. Remove the invalid recipient from the list
  4. 从列表中删除无效的收件人
  5. Set your retry setting in DBMail to 0
  6. 将DBMail中的重试设置设置为0



I had this same duplication issue while using a SELECT statement in @query to send constant text in the body of every email, in addition to using @body and @subject to send custom text depending on some condition.


One email contained both custom text and query text as expected. The duplicated email contained only the @query text (no custom text) with a system inserted subject line of "SQL Server Message".

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

I ran SELECT * FROM msdb.dbo.sysmail_sentitems and sure enough email was being sent twice. A look at sysmail_configuration revealed that AccountRetryAttempts paramValue = 1.

我运行了SELECT * FROM msdb.dbo.sysmail_sentitems,确实发送了两次电子邮件。看一下sysmail_configuration,发现AccountRetryAttempts paramValue = 1。

The problem went away after I removed @query entirely from the stored procedure (executed the alteration), ran the sp. Then I put @query back in the sp, exec the alteration. After that, the emails began sending only once. Go figure.




Make sure you are not having any other Update statements in any other triggers in side triggers on update.


Even i faced the similar problem, when i cross checked with my triggers I've seen that i used another Update statement in my another trigger. It caused multiple firing to the triggers. Hence two mails were triggered.




© 2014-2019 ITdaan.com 粤ICP备14056181号