Dépannage de la messagerie de base de données : courrier en file d'attente, non remis

Cette rubrique explique comment remédier à la situation où les messages électroniques sont mis en attente avec succès, mais non remis.

Diagnostiquer le problème

Le programme externe de messagerie de base de données consigne l'activité de la messagerie dans la base de données msdb.

En premier lieu, pour confirmer que la messagerie de base de données est activée, utilisez l'Option Database Mail XPs de la procédure stockée système sp_configure.

Exécutez ensuite l'instruction suivante dans la base de données msdb pour vérifier l'état de la file d'attente de messagerie :

sysmail_help_queue_sp @queue_type = 'Mail' ;

Pour des explications détaillées des colonnes, consultez la section « Ensemble de résultats » dans sysmail_help_queue_sp (Transact-SQL).

Vérifiez l'activité dans la vue sysmail_event_log. Cette vue doit contenir une entrée établissant que le programme externe de messagerie de base de données a été démarré. S'il n'existe aucune entrée dans la vue sysmail_event_log, consultez le symptôme Messages en attente, aucune entrée dans sysmail_event_log. S'il existe des erreurs dans la vue sysmail_event_log, résolvez l'erreur spécifique.

S'il existe des entrées dans la vue sysmail_event_log, vérifiez l'état des messages dans la vue sysmail_allitems.

État de message non envoyé

Un état non envoyé indique que le programme externe de messagerie de base de données n'a pas encore traité le message électronique. Le programme externe de messagerie de base de données peut avoir pris du retard dans le traitement des messages ; la vitesse à laquelle le programme externe traite les messages dépend des conditions du réseau, du délai d'attente avant une nouvelle tentative, du volume des messages et de la capacité du serveur SMTP. Si le problème persiste, envisagez d'utiliser plusieurs profils pour distribuer les messages entre plusieurs serveurs SMTP.

Vérifiez la date de modification la plus récente pour les messages remis. Si la dernière remise s'est produite il y a quelque temps, vérifiez dans la vue sysmail_event_log que le programme externe a bien été démarré par Service Broker. Si la dernière tentative n'a pas démarré le programme externe, vérifiez que le Programme externe de la messagerie de base de données est situé dans le répertoire correct et que le compte de service pour SQL Server dispose de l'autorisation d'exécuter l'exécutable.

Notes

Pour supprimer les anciens messages non envoyés, attendez que les messages non remis soient les messages les plus anciens dans la file d'attente, puis supprimez-les avec sysmail_delete_mailitems_sp.

État de message = reprise

Un état reprise indique que la messagerie de base de données a tenté de remettre le message au serveur SMTP, mais n'a pas pu. Ceci est généralement dû à une interruption du réseau, à une défaillance du serveur SMTP ou à une configuration incorrecte du compte de messagerie de base de données. Le message finira par parvenir à destination, ou il échouera et postera un message dans le journal d'événements.

État de message = envoyé

Un état envoyé indique que le programme externe de messagerie de base de données a remis le message électronique au serveur SMTP. Si le message n'est pas arrivé à destination, le serveur SMTP a accepté le message de la messagerie de base de données, mais n'a pas pu le remettre au destinataire final. Vérifiez les journaux du serveur SMTP ou contactez l'administrateur du serveur SMTP. Vous pouvez aussi tester le serveur de messagerie SMTP au moyen d'un autre client tel qu'Outlook Express.

État de message = en échec

Un état en échec indique que le programme externe de messagerie de base de données n'a pas pu remettre le message au serveur SMTP. Dans ce cas, la vue sysmail_event_log contient les informations détaillées du programme externe. Pour avoir un exemple de requête joignant sysmail_faileditems et sysmail_event_log pour récupérer des messages d'erreur détaillés, consultez Procédure : Vérification de l'état des messages électroniques envoyés avec la messagerie de base de données (Transact-SQL). Les causes d'échec les plus courantes sont une adresse de destination incorrecte ou des problèmes de réseau qui empêchent le programme externe d'atteindre un ou plusieurs des comptes de basculement. Des problèmes sur le serveur SMTP peuvent également entraîner le rejet du courrier électronique. Avec l'Assistant Configuration de messagerie de base de données, définissez le Niveau de journalisation à Commentaires et envoyez un message de test pour rechercher le point d'échec.