Partager via


Erreurs courantes avec Database Mail

S’applique à :SQL ServerAzure SQL Managed Instance

Cet article décrit certaines erreurs courantes rencontrées avec la messagerie de base de données, et leurs solutions.

Pour exécuter des commandes T-SQL sur votre instance SQL Server, utilisez SQL Server Management Studio (SSMS),l’extension MSSQL pour Visual Studio Code, sqlcmd ou votre outil de requête T-SQL favori.

la procédure stockée « sp_send_dbmail » est introuvable

La procédure stockée sp_send_dbmail est installée dans la msdb base de données. Vous devez exécuter sp_send_dbmail à partir de la msdb base de données ou spécifier un nom en trois parties pour la procédure stockée.

Exemple :

EXEC msdb.dbo.sp_send_dbmail ...

Ou :

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Utilisez Configurer la messagerie de base de données pour activer et configurer la messagerie de base de données.

profil incorrect

Ce message peut s'afficher pour deux raisons. Le profil spécifié n’existe pas ou l’utilisateur qui exécute sp_send_dbmail (Transact-SQL) n’a pas l’autorisation d’accéder au profil.

Pour vérifier les autorisations pour un profil, exécutez la procédure stockée sysmail_help_principalprofile_sp (Transact-SQL) avec le nom du profil. Utilisez la procédure stockée sysmail_add_principalprofile_sp (Transact-SQL) ou Configurer la Messagerie de Base de Données pour permettre à un utilisateur ou à un groupe d’accéder à un profil.

autorisation refusée sur la procédure sp_send_dbmail

Cet article explique comment résoudre un message d’erreur indiquant que l’utilisateur qui tente d’envoyer la messagerie de base de données n’a pas l’autorisation d’exécuter sp_send_dbmail

Le texte du message d'erreur est le suivant :

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Pour envoyer la messagerie de base de données, les utilisateurs doivent être un utilisateur dans la msdb base de données et un membre du rôle de base de données DatabaseMailUserRole dans la msdb base de données. Pour ajouter des utilisateurs ou groupes msdb à ce rôle, utilisez SQL Server Management Studio ou exécutez l’instruction suivante pour l’utilisateur ou le rôle que vous voulez autoriser à envoyer des messages à partir de Database Mail.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

Pour plus d’informations, consultez sp_addrolemember et sp_droprolemember.

Courrier en file d’attente, aucune entrée dans sysmail_event_log ou dans le journal des événements des applications Windows

Database Mail s’appuie sur Service Broker pour mettre les e-mails en file d’attente. Si la messagerie de base de données est arrêtée ou si la remise des messages Service Broker n’est pas activée dans la msdb base de données, la messagerie de base de données met en file d’attente les messages dans la base de données, mais ne peut pas envoyer les messages. Dans ce cas, les messages Service Broker restent dans la file d’attente de messagerie Service Broker. Service Broker n’active pas le programme externe, il n’y a donc aucune entrée de journal dans sysmail_event_log et aucune mise à jour de l’état de l’élément dans sysmail_allitems et des vues associées.

Exécutez l’instruction suivante pour vérifier si Service Broker est activé dans la msdb base de données :

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Une valeur de 0 indique que la remise des messages Service Broker n’est pas activée dans la base de données msdb. Pour résoudre le problème, activez Service Broker dans la base de données avec la commande Transact-SQL suivante :

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

La messagerie de base de données est basée sur un certain nombre de procédures stockées internes. Pour réduire la surface d’exposition, ces procédures stockées sont désactivées lors d’une nouvelle installation de SQL Server. Pour activer ces procédures stockées, utilisez les Database Mail XPs (option de configuration du serveur) de la sp_configure procédure stockée système, comme dans l'exemple suivant :

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

La messagerie de base de données pourrait être interrompue dans la base de données msdb. Exécutez l’instruction suivante pour vérifier l’état de Database Mail :

EXECUTE dbo.sysmail_help_status_sp;

Pour démarrer la messagerie de base de données dans une base de données hôte de messagerie, exécutez la commande suivante dans la msdb base de données :

EXECUTE dbo.sysmail_start_sp;

Service Broker examine la durée de vie de la boîte de dialogue pour les messages quand elle est activée ; par conséquent, les messages ayant figuré dans la file d’attente de transmission Service Broker pour une durée supérieure à la durée de vie de la boîte de dialogue configurée échouent immédiatement. Database Mail met à jour l’état des messages qui ont échoué dans sysmail_allitems et les vues associées. Vous devez déterminer si vous voulez envoyer de nouveau les messages électroniques. Pour plus d’informations sur la configuration de la durée de vie de la boîte de dialogue utilisée par la messagerie de base de données, consultez sysmail_configure_sp.

Étape suivante