wake-up-neo.com

Gespeicherte Prozedur mit SP_SEND_DBMAIL, die doppelte E-Mail an alle Empfänger sendet

Ich habe eine gespeicherte Prozedur, die jede Nacht ausgeführt wird und die Ergebnisse einer Abfrage an mehrere Empfänger senden soll. An den meisten Tagen wird jedoch eine Minute später eine doppelte E-Mail gesendet. Der von mir verwendete Code lautet wie folgt (alle E-Mails und Datenbankreferenzen wurden geändert):

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

Jede Hilfe dabei wäre sehr dankbar.

9
andewM

Es hat sich herausgestellt, dass die Anzahl der Account Retry Accounts auf dem Server auf 0 reduziert wurde (im Datenbank-Mail-Konfigurationsassistenten).

6
andewM

Wenn es nicht zweimal von SQL Server gesendet wird und auch kein Problem von Mail Server ist, stellen Sie sicher, dass Sie keine E-Mails in Outlook mit Filtern für E-Mails abrufen. Möglicherweise erhalten Sie die E-Mails zweimal.

0
Nilesh Thakkar

Ich würde vorschlagen, dass Sie Ihrer Datenbank eine weitere Tabelle hinzufügen, in der die Informationen zu dem Zeitpunkt gespeichert sind, an dem eine E-Mail zum letzten Mal an jeden Empfänger gesendet wurde.

Ohne einen solchen Tisch können Sie nicht wirklich wissen, was los ist. Was ist, wenn Sie SP versehentlich mehrmals ausführen? Nichts hindert es daran, eine E-Mail zu senden.

In Bezug auf dieses Problem - behält Ihr Mailserver eine Kopie in den gesendeten Nachrichten? In diesem Fall möchten Sie möglicherweise das Sendedatum für alle Nachrichten dort überprüfen. Hier erhalten Sie möglicherweise gute Informationen zu den Vorgängen.

0
Igor Voplov

Wenn doppelte E-Mails an Empfänger gesendet werden, bedeutet dies, dass Ihr SP mehrmals pro Tag aufgerufen wird. Überprüfen Sie die in Ihrem SQL-Job, der diesen SP aufruft, festgelegte Anrufzeit. Es sollte einmal am Tag sein, um doppelte E-Mails zu vermeiden.

0
Ken Clark

Ich hatte das gleiche Duplizierungsproblem, als ich eine SELECT-Anweisung in @query verwendete, um konstanten Text im Textkörper jeder E-Mail zu senden. Außerdem verwendete ich @body und @subject, um benutzerdefinierten Text zu senden, abhängig von bestimmten Bedingungen.

Eine E-Mail enthielt erwartungsgemäß sowohl benutzerdefinierten Text als auch Abfragetext. Die duplizierte E-Mail enthielt nur den @ query-Text (keinen benutzerdefinierten Text) mit einer vom System eingefügten Betreffzeile von "SQL Server Message".

Ich habe SELECT * FROM msdb.dbo.sysmail_sentitems ausgeführt und sicher genug E-Mails wurden zweimal gesendet. Ein Blick auf sysmail_configuration ergab, dass AccountRetryAttempts paramValue = 1 ist.

Das Problem verschwand, nachdem ich @query vollständig aus der gespeicherten Prozedur entfernt hatte (die Änderung ausgeführt), und sp. Dann stelle ich @query wieder in den sp, führe die Änderung aus. Danach begannen die E-Mails nur einmal zu senden. Stelle dir das vor.

0
Doreen

Dies liegt daran, dass eine Adresse, die die E-Mail empfängt (entweder in einer Gruppe oder als Einzelperson), eine nicht mehr gültige E-Mail-Adresse hat. Während Sie Wiederholungsversuche wie in der akzeptierten Antwort vermeiden können, ist es am besten, die Verteilung zu bereinigen.

0
Eric Higgins

Stellen Sie sicher, dass keine anderen Update-Anweisungen in anderen Triggern in Side-Triggern beim Update enthalten sind.

Sogar ich war mit dem ähnlichen Problem konfrontiert, als ich meine Trigger überprüft habe, habe ich festgestellt, dass ich eine andere Update-Anweisung in meinem anderen Trigger verwendet habe. Die Auslöser wurden mehrfach abgefeuert. Daher wurden zwei Mails ausgelöst.

0
Tinku Analytics

Ich hatte ein ähnliches Problem, bei dem wir mehrere Empfänger in einer einzigen E-Mail hatten und dadurch zwei gesendete E-Mails generiert wurden. Das Problem wurde dadurch behoben, dass einer der Empfänger nicht mehr gültig war. Bei dem erneuten Versuch wurde die E-Mail an alle Empfänger gesendet, nicht nur an denjenigen, bei dem ein Fehler auftrat. Es gibt eine Reihe von Ansichten in msdb, die Ihnen helfen können, Ihren ungültigen Empfänger zu finden. Sie starten dbo.sysmail_ <something>

Es gibt einige Lösungen für dieses Problem.

  1. Teilen Sie jeden Empfänger als separate E-Mail auf.
  2. Entfernen Sie den ungültigen Empfänger aus der Liste
  3. Setzen Sie Ihre Wiederholungseinstellung in DBMail auf 0
0
Hugh McDaid