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

Comment envoyer des e-mails à partir de SQL Server (T-SQL)

SQL Server offre la possibilité d'envoyer des e-mails via sa solution Database Mail.

L'acte réel d'envoi de courrier est fait avec le sp_send_dbmail procédure stockée. Mais avant de commencer à envoyer des e-mails à partir de SQL Server, vous devez activer et configurer Database Mail.

Vous pouvez le faire avec l'interface graphique SSMS ou avec T-SQL.

Cet article montre comment le faire avec T-SQL. Il suppose que la messagerie de base de données n'a jamais été activée sur votre système et passe donc par les étapes nécessaires à son activation.

Si vous préférez utiliser l'interface graphique SSMS, consultez Comment configurer la messagerie de base de données dans SQL Server (SSMS).

Étape 1 :Activer les XP de messagerie de base de données

La première chose que vous devez faire avant d'envoyer un courrier à partir de SQL Server est d'activer les procédures stockées étendues de messagerie de base de données (Database Mail XPs). Ceux-ci sont dans le msdb base de données système.

Cela nécessite également que "Afficher les options avancées" soit activé.

Ceux-ci sont désactivés par défaut. Donc, si vous n'avez jamais utilisé Database Mail sur votre système auparavant, vous devrez les activer.

Voici comment activer les options avancées et les XP de la messagerie de base de données :

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

Il n'est pas nécessaire de redémarrer SQL Server. Les XP de la messagerie de base de données devraient maintenant être disponibles.

Microsoft recommande en fait que les options avancées telles que celle-ci ne soient modifiées que par un administrateur de base de données expérimenté ou un technicien certifié SQL Server, mais pour les besoins de cet article, je suppose que vous êtes un administrateur de base de données expérimenté qui vous rafraîchit la mémoire 😉

Dans tous les cas, pour exécuter sp_configure avec les deux paramètres pour changer une option de configuration ou pour exécuter le RECONFIGURE déclaration, vous devez disposer de la ALTER SETTINGS autorisation au niveau du serveur. Le ALTER SETTINGS l'autorisation est implicitement détenue par le sysadmin et administrateur du serveur rôles de serveur fixes.

Étape 2 :Créer un compte de messagerie et un profil

La messagerie de base de données est envoyée via un profil, plutôt que directement via un compte d'utilisateur.

Pour envoyer un e-mail avec la messagerie de base de données, vous devez créer un compte de messagerie de base de données, un profil de messagerie de base de données, ajouter le compte au profil, puis accorder à un utilisateur l'accès à ce profil. L'utilisateur doit être sur le msdb base de données.

Le code T-SQL pour ce faire pourrait ressembler à ceci :

-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Vous devrez remplacer les différents détails par les vôtres. Cela suppose également que vous spécifiez un serveur de messagerie qui fonctionne et que vous utilisez le bon port.

Notez que j'avais déjà une connexion appelée Marge sur mon serveur. Ici, j'ai créé un utilisateur sur le msdb base de données pour cette connexion. Puis dans la dernière partie, j'ai accordé à cet utilisateur l'accès au profil que je viens de créer.

Dans cet exemple, j'ai créé un compte de messagerie de base de données et l'ai ajouté au profil. Vous pouvez ajouter plusieurs comptes à un profil si vous le souhaitez. Cela peut être utile comme basculement lors de l'envoi de courrier. Si le premier compte échoue, il essaiera le suivant, puis le suivant, et ainsi de suite.

Une fois que vous avez le code ci-dessus (avec vos propres détails), vous devriez pouvoir envoyer du courrier.

Étape 3 :Envoyer un e-mail

Comme mentionné, l'envoi réel du courrier se fait avec le sp_send_dbmail procédure stockée.

Voici un exemple :

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Il s'agit d'un simple e-mail contenant les éléments de base tels que le destinataire, l'objet, le corps de l'e-mail, etc.

Si vous ne spécifiez pas de profil, la procédure utilisera le profil privé par défaut pour l'utilisateur actuel. S'il n'y a pas de profil privé par défaut pour l'utilisateur, il utilisera le profil public par défaut pour le msdb base de données. S'il n'y a pas de profil public par défaut, vous obtiendrez une erreur.

Plus d'options

Le sp_send_dbmail procédure accepte un peu plus d'arguments que ce que j'ai utilisé dans cet exemple.

Voici la syntaxe officielle pour le sp_send_dbmail procédure :

sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]  
    [ , [ @recipients = ] 'recipients [ ; ...n ]' ]  
    [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]  
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]  
    [ , [ @from_address = ] 'from_address' ]  
    [ , [ @reply_to = ] 'reply_to' ]   
    [ , [ @subject = ] 'subject' ]   
    [ , [ @body = ] 'body' ]   
    [ , [ @body_format = ] 'body_format' ]  
    [ , [ @importance = ] 'importance' ]  
    [ , [ @sensitivity = ] 'sensitivity' ]  
    [ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]  
    [ , [ @query = ] 'query' ]  
    [ , [ @execute_query_database = ] 'execute_query_database' ]  
    [ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]  
    [ , [ @query_attachment_filename = ] query_attachment_filename ]  
    [ , [ @query_result_header = ] query_result_header ]  
    [ , [ @query_result_width = ] query_result_width ]  
    [ , [ @query_result_separator = ] 'query_result_separator' ]  
    [ , [ @exclude_query_output = ] exclude_query_output ]  
    [ , [ @append_query_error = ] append_query_error ]  
    [ , [ @query_no_truncate = ] query_no_truncate ]   
    [ , [ @query_result_no_padding = ] @query_result_no_padding ]   
    [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]

Consultez la documentation de Microsoft pour une explication détaillée de chaque argument.

Référence de messagerie de base de données

Consultez les didacticiels de messagerie de base de données pour obtenir une liste complète des didacticiels de messagerie de base de données. Cela peut être une excellente référence, car chaque didacticiel traite d'une partie spécifique de Database Mail.