Partage via


Étapes de résolution des problèmes généraux liés à Database Mail

S’applique à :SQL ServerAzure SQL Managed Instance

Le dépannage de la messagerie de base de données implique de vérifier les aspects généraux du système de messagerie de base de données décrits ci-dessous. Ces procédures sont présentées dans un ordre logique, mais elles peuvent être évaluées dans n'importe quel ordre.

autorisations

Vous devez être membre du rôle serveur fixe sysadmin pour résoudre tous les aspects de la messagerie de base de données. Les utilisateurs qui ne sont pas membres du rôle serveur fixe sysadmin peuvent uniquement obtenir des informations sur les e-mails qu’ils tentent d’envoyer, et non sur les e-mails envoyés par d’autres utilisateurs.

Database Mail est-il activé ?

  1. Dans SQL Server Management Studio, connectez-vous à une instance de SQL Server à l’aide d’une fenêtre d’éditeur de requête, puis exécutez le code suivant :

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    Dans le volet des résultats, vérifiez que le paramètre run_value pour Database Mail XPs (option de configuration de serveur) est défini sur 1.

    Si le run_value n’est pas 1, la messagerie de base de données n'est pas activée.

    Database Mail n'est activé automatiquement, et ce, afin de réduire le nombre de fonctionnalités disponibles en cas d'attaque par un utilisateur malveillant. Pour plus d'informations, consultez Configuration de la surface d'exposition.

  2. Si vous décidez que Database Mail peut être activé, exécutez le code suivant :

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    

    Pour restaurer la sp_configure procédure à son état par défaut, qui n’affiche pas d’options avancées, exécutez le code suivant :

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

Les utilisateurs sont-ils correctement configurés pour envoyer du courrier ?

  1. Pour envoyer du courrier avec Database Mail, vous devez être membre du rôle de base de données DatabaseMailUserRole dans la base de données msdb. Les membres du rôle serveur fixe sysadmin et du rôle msdbdb_owner sont automatiquement membres du rôle DatabaseMailUserRole. Pour afficher tous les autres membres du rôle DatabaseMailUserRole, exécutez l’instruction suivante :

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Pour ajouter des utilisateurs au rôle DatabaseMailUserRole, utilisez l’instruction suivante :

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Pour pouvoir envoyer des messages à l'aide de la messagerie de base de données, les utilisateurs doivent avoir accès à au moins un profil de messagerie de base de données. Pour afficher les utilisateurs (principaux) et les profils auxquels ils ont accès, exécutez l'instruction suivante :

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Utilisez l’Assistant Configuration de la messagerie de base de données pour créer des profils et accorder l’accès aux profils aux utilisateurs.

Database Mail est-il démarré ?

Le programme externe Database Mail est activé quand il y a des e-mails à traiter. S'il n'y a eu aucun message à envoyer pendant le délai d'attente spécifié, le programme est fermé.

  1. Pour confirmer que l’activation de Database Mail est démarrée, exécutez l’instruction suivante :

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Si l'activation de Database Mail n'est pas démarrée, exécutez l'instruction suivante pour la démarrer :

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Si le programme externe de messagerie de base de données est démarré, vérifiez l'état de la file d'attente des messages à l'aide de l'instruction suivante :

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    La file d’attente des messages doit être à l’état RECEIVES_OCCURRING. La file d’état peut varier d’un moment à l’autre. Si l’état de la file d’attente des messages n’est pas RECEIVES_OCCURRING, essayez de redémarrer la file d’attente. Arrêtez la file d’attente à l’aide de l’instruction suivante :

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Ensuite, démarrez la file d’attente à l’aide de l’instruction suivante :

    EXEC msdb.dbo.sysmail_start_sp;
    

    Remarque

    Utilisez la colonne length du jeu de résultats de sysmail_help_queue_sp pour déterminer le nombre d'emails dans la file d’attente de messagerie.

Les problèmes affectent-ils tous les comptes ou seulement certains d’entre eux ?

Si vous avez déterminé que certains profils, mais pas tous les profils peuvent envoyer des messages, vous pouvez rencontrer des problèmes avec les comptes de messagerie de base de données utilisés par les profils de problème.

  1. Pour déterminer quels comptes parviennent à envoyer des messages, exécutez l'instruction suivante :

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Si un profil défaillant n’utilise aucun des comptes listés, il est possible qu’aucun des comptes disponibles pour ce profil ne fonctionne correctement. Pour tester des comptes individuels, utilisez l’Assistant Configuration de Database Mail pour créer un nouveau profil associé à un compte unique, puis utilisez la boîte de dialogue Envoyer un message électronique de test pour envoyer un message à l’aide du nouveau compte.

  3. Pour afficher les messages d'erreur renvoyés par la messagerie de base de données, exécutez l'instruction suivante :

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Remarque

    Database Mail considère qu’un message a été envoyé quand il est remis à un serveur de messagerie SMTP. Les erreurs qui se produisent après, par exemple à cause d'une adresse de destinataire non valide, peuvent empêcher la remise du message, mais elles n'apparaissent pas dans le journal de la messagerie de base de données.

Nouvelles tentatives de remise de courrier

  1. Si vous avez déterminé que la messagerie de base de données échoue parce que le serveur SMTP ne peut pas être atteint de manière fiable, vous pouvez augmenter votre taux de remise de courrier réussi en augmentant le nombre de tentatives d’envoi de la messagerie de base de données pour envoyer chaque message. Démarrez l’Assistant Configuration de Database Mail et sélectionnez l’option Afficher ou modifier les paramètres du système. Pour résoudre ce problème, vous pouvez également associer des comptes supplémentaires au profil ; ainsi, en cas de basculement du compte principal, Database Mail utilise le compte de remplacement pour envoyer les messages.

  2. Dans la page Configurer les paramètres du système, le nombre de Tentatives de reprises de comptes est de 60 par défaut, et le Délai entre reprises de comptes est de cinq secondes par défaut, ce qui signifie que la remise des messages échouera si le serveur SMTP ne peut pas être atteint dans un délai de cinq minutes. Augmentez ces paramètres pour accroître le délai imparti avant l’échec de la remise du courrier.

    Remarque

    Quand un grand nombre de messages sont envoyés, les valeurs par défaut volumineuses peuvent augmenter la fiabilité, mais augmentent considérablement l’utilisation des ressources à mesure que de nombreux messages sont tentés d’être remis à nouveau. Attaquez-vous au problème de base en essayant de résoudre le problème de réseau ou de serveur SMTP qui empêche la messagerie de base de données de contacter rapidement le serveur SMTP.

Vérifiez que Service Broker est activé pour msdb

Database mail exige que Service Broker soit activé pour la base de données msdb. Vérifiez si le service Broker est activé dans msdb avec le script T-SQL suivant :

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

S’il n’est pas activé, le service Broker doit être activé. L’exemple de script suivant nécessite un accès exclusif aux msdb bases de données système. Toutefois, cela peut ne pas être possible pour s’exécuter pendant les heures ouvrées classiques. Pour plus d'informations, consultez OPTIONS ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;