Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Configuration de la messagerie de base de données dans SQL Server

La messagerie de base de données SQL Server a été introduite dans SQL Server 2005. La messagerie de base de données est un composant qui peut envoyer des e-mails à l'aide de SQL Server Engine. À l'aide de la messagerie de base de données, un administrateur ou un développeur peut envoyer le résultat d'une requête à un utilisateur final. Les administrateurs de base de données peuvent le configurer pour recevoir des alertes et des notifications par e-mail. La messagerie de base de données utilise SMTP (Simple Mail Transfer Protocol) pour envoyer les e-mails aux destinataires.

Dans cet article, je vais montrer comment configurer la messagerie de base de données SQL Server.

Prérequis pour activer la messagerie de base de données

Pour activer la fonctionnalité de messagerie de la base de données, les prérequis suivants sont requis :

  1. Service Broker pour la base de données MSDB doit être activé.
  2. Le service SQL Server Agent doit être en cours d'exécution.

Service Broker doit être activé

La messagerie de base de données nécessite un courtier de services pour mettre les e-mails en file d'attente. Si le service broker est désactivé, la messagerie de la base de données ne peut pas livrer les messages du service broker et elle reste dans la file d'attente du service broker.
Pour vérifier que le service broker est activé, exécutez la requête suivante :

USE master 
go 

SELECT database_id AS 'Database ID', 
       NAME        AS 'Database Name', 
       CASE 
         WHEN is_broker_enabled = 0 THEN 'Service Broker is disabled.' 
         WHEN is_broker_enabled = 1 THEN 'Service Broker is Enabled.' 
       END         AS 'Service Broker Status' 
FROM   sys.databases 
WHERE  NAME = 'msdb.'

La sortie ressemble à ceci :

Si l'agent de service sur la base de données MSDB est désactivé, exécutez les requêtes suivantes dans l'ordre pour activer l'agent de service :

Use master
go
alter database [MSDB] set single_user with rollback immediate
GO
alter database [MSDB] set Enable_Broker
GO
alter database [MSDB] set multi_user with rollback immediate
GO

Le service SQL Server Agent doit être en cours d'exécution

La messagerie de base de données envoie des e-mails ou des messages à l'aide du service d'agent SQL Server. Si les services de l'agent ne sont pas en cours d'exécution, SQL Server ne peut pas envoyer d'e-mails. Lorsque le service d'agent n'est pas en cours d'exécution, tous les messages seront mis en file d'attente et, lorsque le service d'agent démarre, tous les messages en file d'attente seront remis.

Pour vérifier l'état du service de l'agent, exécutez la commande suivante dans SQL Server Management Studio.

use master
go
EXEC xp_servicecontrol N'querystate',N'SQLAgent$CMS'

La sortie ressemble à ceci :

Si le service de l'agent SQL Server n'est pas en cours d'exécution, nous devons le démarrer. Pour démarrer le service SQL Server Agent, ouvrez Services , allez dans Panneau de configuration>> Outils d'administration>> Services . Dans la liste des services, recherchez SQL Server Agent . Cliquez avec le bouton droit sur SQL Server Agent et sélectionnez Démarrer, comme le montre l'image suivante :

Une fois l'agent de service activé et le service de l'agent SQL démarré, activez l'e-mail de la base de données en modifiant le paramètre de configuration de l'instance de la base de données. Par défaut, la fonction de courrier électronique de la base de données n'est pas activée. Il doit être activé en modifiant la valeur de configuration de Database Mail XPs de 0 à 1. Encore une fois, les XP de messagerie de base de données paramètre est une option avancée ; par conséquent, avant de le modifier, modifiez l'option Afficher l'option avancée paramètre de configuration de 0 à 1.

Pour activer la messagerie de la base de données, exécutez les requêtes suivantes dans l'ordre :

USE master
Go
EXEC sp_configure 'show advanced options', 1 --Enable advance option
Go
RECONFIGURE
Go
EXEC sp_configure 'Database Mail XPs,' 1 --Enable database Mail option
Go
RECONFIGURE
Go
EXEC sp_configure 'show advanced options', 0 --Disabled advanced option
Go
RECONFIGURE
Go

Une fois la messagerie de base de données activée, créez un profil de messagerie de base de données et un compte de messagerie de base de données.

Configuration de la messagerie de base de données

Une fois toutes les conditions préalables remplies, configurez le compte de messagerie de la base de données et le profil de messagerie de la base de données.

Création d'un profil et d'un compte de messagerie de base de données

Pour configurer le compte de messagerie de la base de données et le profil de messagerie de la base de données, ouvrez SQL Server Management Studio. Dans l'Explorateur d'objets, développez Gestion et cliquez avec le bouton droit sur Configurer la messagerie de la base de données , comme illustré dans l'image suivante :

L'assistant de configuration de la messagerie de base de données boîte de dialogue s'ouvre. Dans la boîte de dialogue, sélectionnez Configurer la messagerie de la base de données en effectuant les tâches suivantes bouton radio et cliquez sur Suivant .

Maintenant, dans le Nouveau profil boîte de dialogue, fournissez un nom de profil, une description facultative et cliquez sur Ajouter bouton pour créer un compte SMTP. Vous pouvez configurer plusieurs comptes SMTP. Lorsque la messagerie de la base de données envoie un e-mail, elle utilise le compte SMTP en fonction de la priorité indiquée dans le compte SMTP vue grille. Si un compte échoue lors de l'envoi d'e-mails, le profil utilise le compte suivant dans la liste de priorité. Voir l'image suivante :

Dans le Nouveau compte de messagerie de base de données boîte de dialogue, fournissez un Nom de compte approprié , Description (facultatif), Adresse e-mail , Nom à afficher , Répondre par e-mail (Facultatif), serveur SMTP et Numéro de port . Si le serveur SMTP utilise l'authentification SSL/TSL, cochez Le serveur requiert une authentification sécurisée option. Dans la liste d'authentification, sélectionnez un type d'authentification, utilisé pour authentifier le serveur SMTP et cliquez sur OK . Voir l'image suivante :

De retour dans l'assistant de configuration de la messagerie de base de données boîte de dialogue, le compte SMTP sera répertorié dans les comptes SMTP vue grille. Voir l'image suivante :

Cliquez sur Suivant pour configurer la sécurité du profil de messagerie de la base de données. Nous pouvons configurer le profil de messagerie de la base de données en privé ou en public. Seul un utilisateur ou un rôle spécifique peut envoyer des e-mails à l'aide du profil privé. Tout utilisateur ou rôle de base de données peut envoyer des e-mails à l'aide du profil public. Les utilisateurs doivent être créés dans la base de données MSDB et ces utilisateurs doivent être membres d'un rôle de base de données nommé DatabaseMailUserRole Pour envoyer un email. Nous pouvons également faire du profil un profil par défaut. Une fois la sécurité du profil définie, cliquez sur Suivant pour configurer le paramètre système. Voir l'image suivante pour afficher la configuration :

Dans Configurer les paramètres système fenêtre, nous pouvons définir un nombre de nouvelles tentatives, la taille maximale du fichier joint, la liste des extensions de fichier qu'il est interdit d'envoyer en pièce jointe. Voir l'image suivante :

Une fois le paramètre système configuré, cliquez sur Suivant pour revoir toute la configuration et la liste des actions. Cliquez sur Terminer pour terminer la configuration de la messagerie de la base de données. Voir l'image suivante.

Une fois la configuration terminée, cliquez sur Fermer pour quitter l'assistant. Voir l'image suivante :

Création et configuration d'un profil et d'un compte de messagerie de base de données à l'aide de T-SQL

Nous pouvons également configurer le profil de messagerie de la base de données et le compte de messagerie à l'aide de T-SQL. Pour configurer le courrier de la base de données, l'utilisateur doit disposer de l'autorisation "exécuter" sur la procédure stockée suivante.

  1. Sysmail_add_account_sp
  2. Sysmail_add_profile_sp
  3. Sysmail_add_profileaccount_sp

Le Sysmail_add_account_sp procédure crée un compte pour la messagerie de la base de données. Pour créer un compte pour la messagerie de la base de données, exécutez le code suivant :

EXEC msdb.dbo.sysmail_add_account_sp
    @account_name = 'Database Mail Default SMTP account'
  , @description = 'This account will be used to send database mail'
  , @email_address = '[email protected]'
  , @display_name = 'DBA Support'
  , @replyto_address = ''
  , @mailserver_type = 'SMTP'
  , @mailserver_name = '192.168.1.60'
  , @port = 25
Go

Le Sysmail_add_profile_sp procédure crée un profil de messagerie de base de données. Pour créer un profil de messagerie de base de données, exécutez le code suivant :

-- Create a Database Mail profile
EXEC msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'Database Mail Profile'
  , @description = 'This profile will be used to send database mail'
Go

Le Sysmail_add_profileaccount_sp La procédure ajoute le compte SMTP à un profil de messagerie de base de données. Pour ajouter un compte SMTP au profil de messagerie de la base de données, exécutez le code suivant :

-- Add the account to the profile
EXEC msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'Database Mail Profile'
  , @account_name = 'Database Mail Default SMTP account'
  , @sequence_number = 1
Go

Envoi d'e-mails de test à l'aide de la messagerie de base de données

Une fois que la messagerie de la base de données est configurée, comme je l'ai mentionné précédemment, pour envoyer un e-mail, l'utilisateur doit être créé dans la base de données MSDB et cet utilisateur doit être membre de DatabaseMailUserRole . Il permet à un utilisateur de base de données d'envoyer des e-mails à l'aide de Database Mail. L'utilisateur de la base de données doit avoir une autorisation d'exécution sur les procédures stockées suivantes, utilisées pour gérer le courrier de la base de données :

  • sysmail_help_status_sp
  • sysmail_delete_mailitems_sp
  • sysmail_allitems
  • sysmail_event_log
  • sysmail_faileditems
  • sysmail_mailattachments
  • sysmail_sentitems
  • sysmail_unsentitems

Pour envoyer un e-mail de test à l'aide de SSMS, ouvrez SQL Server Management Studio>> Développez Gestion dans Gestion SQL Server>> Cliquez avec le bouton droit sur Courrier de base de données et sélectionnez Envoyer un e-mail de test . Voir l'image suivante :

Le bouton Envoyer un e-mail de test boîte de dialogue s'ouvre. Dans le profil de messagerie de la base de données déroulant, sélectionnez le nom du profil utilisé pour envoyer un e-mail (Database Mail Profile), Dans le champ À zone de texte, indiquez l'adresse e-mail du destinataire et cliquez sur Envoyer un e-mail de test . Voir l'image suivante :

Nous pouvons également envoyer des e-mails en utilisant le code T-SQL. Pour cela, exécutez le script T-SQL suivant :

use MSDB
go
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Database Mail Profile'
  , @recipients = '[email protected]'
  , @subject = 'Automated Test Results (Successful)'
  , @body = 'The stored procedure finished successfully.'
Go

Liste des tableaux essentiels pour vérifier l'état des e-mails

Voici la liste des tables, utilisées pour afficher le courrier de la base de données de configuration, le compte de la base de données et l'état du courrier électronique.

[identifiant de table=53 /]

Pour afficher le journal de messagerie de la base de données, ouvrez SQL Server Management Studio>> développez Gestion>> Cliquez avec le bouton droit sur Courrier de base de données et sélectionnez Afficher le journal de messagerie de la base de données . Voir l'image suivante :

Le visualiseur de fichiers journaux la boîte de dialogue s'ouvre, comme illustré dans l'image suivante :

Suppression du compte et du profil de messagerie de la base de données

Pour supprimer le profil de messagerie de base de données, supprimez d'abord le profil de messagerie de base de données. Pour ce faire, ouvrez l'assistant de configuration de la messagerie de base de données, comme expliqué en début d'article. Dans l'assistant, sélectionnez Gérer le compte et les profils de messagerie de base de données et cliquez sur Suivant . Voir l'image suivante :

Dans Gérer les profils et le compte s, sélectionnez Afficher les modifications ou supprimer un profil existant et cliquez sur Suivant . Voir l'image suivante :

Dans Gérer le profil existant page, sélectionnez le nom du profil que vous souhaitez supprimer dans le Nom du profil liste déroulante et cliquez sur Supprimer et cliquez sur Suivant. Voir l'image suivante :

Ensuite, l'écran affichera le résumé de l'action, passez en revue le résumé et cliquez sur Terminer pour supprimer le profil. Voir l'image suivante :

Après avoir supprimé le profil de messagerie de la base de données, supprimez le compte de la base de données. Pour ce faire, sur Ouvrir l'assistant de configuration de la messagerie de base de données>> sélectionnez Gérer les comptes et le profil de messagerie de la base de données>> Choisissez l'option Afficher, modifier ou supprimer un compte existant et cliquez sur Suivant. Voir l'image suivante :

Sur Gérer le compte existant page, depuis le Nom du compte liste déroulante, sélectionnez le nom du compte que vous souhaitez supprimer et cliquez sur le bouton Supprimer bouton, comme illustré dans l'image suivante :

L'écran suivant affichera le résumé de l'action, passez en revue le résumé et cliquez sur Terminer pour supprimer le compte. Voir l'image suivante :

Suppression du compte et du profil de messagerie de la base de données à l'aide de T-SQL

Vous pouvez également supprimer le compte de messagerie de la base de données et le profil de messagerie de la base de données en exécutant le script T-SQL. Pour supprimer le profil et le compte de la base de données, exécutez le code suivant :

IF EXISTS(SELECT * 
            FROM msdb.dbo.sysmail_profileaccount pa 
              INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
              INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
            WHERE p.name = 'Database Mail Profile' 
              AND a.name = 'Database Mail Default SMTP account') 
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_profileaccount_sp @profile_name = 'Database Mail Profile',@account_name = 'Database Mail Default SMTP account' 
  END  
IF EXISTS(SELECT * FROM msdb.dbo.sysmail_account WHERE  name = 'Database Mail Default SMTP account') 
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_account_sp @account_name = 'Database Mail Default SMTP account' 
  END 
IF EXISTS(SELECT * FROM msdb.dbo.sysmail_profile WHERE  name = 'Database Mail Profile')  
  BEGIN 
    EXECUTE msdb.dbo.sysmail_delete_profile_sp @profile_name = 'Database Mail Profile' 
  END

Pour vérifier que la messagerie de la base de données et le compte de la base de données ont été supprimés, exécutez la requête suivante :

SELECT * 
            FROM msdb.dbo.sysmail_profileaccount pa 
              INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
              INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
            WHERE p.name = 'Database Mail Profile' 
              AND a.name = 'Database Mail Default SMTP account'

Résumé

Dans cet article, j'ai expliqué :

  1. Qu'est-ce que la messagerie de base de données et son objectif ?
  2. Prérequis pour configurer Database Mail.
  3. Configurer le compte de messagerie de base de données et le profil de messagerie de base de données à l'aide de SQL Server Management Studio.
  4. Configurer le compte de messagerie de base de données et le profil de messagerie de base de données à l'aide de T-SQL.
  5. Envoyer un e-mail de test à l'aide de SSMS et T-SQL.
  6. Supprimez gracieusement le profil de messagerie de base de données et le compte de messagerie de base de données.