web-dev-qa-db-fra.com

Procédure stockée utilisant SP_SEND_DBMAIL pour envoyer des courriels en double à tous les destinataires

J'ai une procédure stockée qui s'exécute toutes les nuits et qui est supposée envoyer les résultats d'une requête à plusieurs destinataires. Cependant, la plupart des jours, un courrier dupliqué est envoyé une minute plus tard. Le code que j'utilise est le suivant (tous les e-mails et les références de base de données ont été modifiés):

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

Toute l'aide pouvant etre apportée serait très appréciée.

9
andewM

La solution a réduit le nombre de comptes sur le serveur à 0 (dans l’assistant de configuration du courrier de la base de données).

6
andewM

S'il n'est pas envoyé deux fois à partir de SQL Server et qu'il ne s'agit pas d'un problème de serveur de messagerie également, assurez-vous de ne pas vérifier le courrier dans Outlook avec des filtres pour le courrier, vous pouvez alors recevoir le courrier électronique deux fois.

0
Nilesh Thakkar

Je vous suggèrerais d’ajouter à votre base de données une autre table qui contiendra l’information sur la dernière fois qu'un courrier électronique a été envoyé à chaque destinataire.

Sans une telle table, vous ne pouvez pas vraiment savoir ce qui se passe. Que faire si vous exécutez le SP plusieurs fois par accident? Il n'y a rien qui l'empêche d'envoyer un email.

Concernant ce problème, votre serveur de messagerie conserve-t-il une copie des éléments envoyés? Si c'est le cas, vous voudrez peut-être vérifier la date d'envoi pour tous les messages. Cela pourrait vous donner une bonne information sur ce qui se passe.

0
Igor Voplov

S'il envoie des e-mails en double aux destinataires, cela signifie que votre SP est appelé plusieurs fois par jour. Vérifiez le temps d'appel défini dans votre travail SQL qui appelle ce SP. Cela devrait être une fois par jour pour éviter les courriels en double.

0
Ken Clark

J'avais le même problème de duplication lorsque j'utilisais une instruction SELECT dans @query pour envoyer du texte constant dans le corps de chaque courrier électronique, en plus de @body et de @subject pour envoyer du texte personnalisé en fonction de certaines conditions.

Un e-mail contenait le texte personnalisé et le texte de requête comme prévu. Le courrier électronique dupliqué ne contenait que le texte @query (pas de texte personnalisé) avec une ligne d'objet insérée par le système dans "Message SQL Server".

J'ai couru SELECT * FROM msdb.dbo.sysmail_sentitems et suffisamment de courrier électronique a été envoyé deux fois. Un examen de sysmail_configuration a révélé que AccountRetryAttempts paramValue = 1.

Le problème a disparu après que j'ai entièrement retiré @query de la procédure stockée (exécution de la modification), a lancé sp. Puis je remets @query dans le dossier, exécute la modification. Après cela, les courriels n'ont commencé à être envoyés qu'une seule fois. Allez comprendre.

0
Doreen

Cela se produit car une adresse de courrier électronique qui reçoit le courrier électronique (que ce soit dans un groupe ou une personne) n’est plus valide. Bien que vous puissiez éliminer les tentatives comme dans la réponse acceptée, la meilleure approche consiste à nettoyer la distribution.

0
Eric Higgins

Assurez-vous que vous ne rencontrez aucune autre instruction Update dans les autres déclencheurs des déclencheurs secondaires lors de la mise à jour.

Même si je rencontrais le même problème, lorsque j’ai vérifié avec mes déclencheurs, j’ai constaté que j’avais utilisé une autre instruction Update dans mon autre déclencheur. Cela a causé plusieurs tirs aux déclencheurs. Deux mails ont donc été déclenchés.

0
Tinku Analytics

J'ai eu un problème similaire où nous avions plusieurs destinataires dans un seul email, et cela générerait 2 emails envoyés. Le problème a fini par être l'un des destinataires n'était plus valide, et la nouvelle tentative enverrait le courrier électronique à tous les destinataires, pas seulement celui qui a échoué. Msdb contient un certain nombre de vues qui peuvent vous aider à trouver votre destinataire invalide. Ils commencent dbo.sysmail_ <quelque chose>

Il existe plusieurs solutions à ce problème.

  1. Décomposez chaque destinataire en tant qu'e-mail séparé.
  2. Supprimer le destinataire non valide de la liste
  3. Définissez le paramètre de nouvelle tentative dans DBMail sur 0
0
Hugh McDaid