Utilisation de Database Mail sur Amazon RDS for SQL Server
Vous pouvez utiliser Database Mail pour envoyer des e-mails à des utilisateurs à partir de votre instance de base de données Amazon RDS sur SQL Server. Les messages peuvent contenir des fichiers et des résultats de requête. Database Mail comprend les éléments suivants :
-
Objets de configuration et de sécurité – Ces objets créent des profils et des comptes, et sont stockés dans la base de données
msdb
. -
Objets de messagerie – Ces objets incluent la procédure stockée sp_send_dbmail
utilisée pour envoyer des messages, ainsi que des structures de données contenant des informations sur les messages. Ils sont stockés dans la base de données msdb
. -
Objets de journalisation et d'audit – Database Mail écrit les informations de journalisation dans la base de données
msdb
et dans le journal des événements de l'application Microsoft Windows. -
Le fichier exécutable de Database Mail –
DatabaseMail.exe
lit le contenu d'une file d'attente de la base de donnéesmsdb
et envoie les e-mails.
RDS prend en charge Database Mail pour toutes les versions de SQL Server sur les éditions Web, Standard et Enterprise.
Limites
Les limites suivantes s'appliquent à l'utilisation de Database Mail sur votre instance de base de données SQL Server :
-
Database Mail n'est pas pris en charge pour SQL Server Express Edition.
-
La modification des paramètres de configuration de Database Mail n'est pas prise en charge. Pour afficher les valeurs prédéfinies (par défaut), vous devez utiliser la procédure stockée sysmail_help_configure_sp
. -
Les pièces jointes ne sont pas entièrement prises en charge. Pour plus d'informations, consultez Utilisation de pièces jointes.
-
La taille maximale des pièces jointes est de 1 Mo.
-
Database Mail requiert une configuration supplémentaire sur les instances de base de données multi-AZ. Pour plus d'informations, consultez Considérations sur les déploiements multi-AZ.
-
La configuration de SQL Server Agent pour envoyer des e-mails à des opérateurs prédéfinis n'est pas prise en charge.
Activation de Database Mail
Procédez comme suit pour activer Database Mail sur votre instance de base de données :
-
Créez un groupe de paramètres.
-
Modifiez le groupe de paramètres de manière à définir le paramètre
database mail xps
sur 1. -
Associez le groupe de paramètres à l'instance de base de données.
Création du groupe de paramètres pour Database Mail
Créez un groupe de paramètres pour le paramètre database mail xps
qui correspond à l'édition et à la version de SQL Server utilisées par votre instance de base de données.
Vous pouvez également modifier un groupe de paramètres existant. Suivez la procédure décrite dans Modification du paramètre qui active Database Mail.
L'exemple suivant crée un groupe de paramètres pour SQL Server Standard Edition 2016.
Pour créer le groupe de paramètres
Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/
. -
Dans le panneau de navigation, choisissez Groupes de paramètres.
-
Choisissez Créer un groupe de paramètres.
-
Dans le volet Créer un groupe de paramètres, faites ce qui suit :
-
Pour Famille de groupes de paramètres, choisissez sqlserver-se-13.0.
-
Pour Nom du groupe, saisissez un identifiant pour le groupe de paramètres, tel que
dbmail-sqlserver-se-13
. -
Pour Description, saisissez
Database Mail XPs
.
-
-
Sélectionnez Créer un .
L'exemple suivant crée un groupe de paramètres pour SQL Server Standard Edition 2016.
Pour créer le groupe de paramètres
-
Utilisez l'une des commandes suivantes.
Pour Linux, macOS ou Unix :
aws rds create-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --db-parameter-group-family "sqlserver-se-13.0
" \ --description "Database Mail XPs
"Pour Windows :
aws rds create-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --db-parameter-group-family "sqlserver-se-13.0
" ^ --description "Database Mail XPs
"
Modification du paramètre qui active Database Mail
Modifiez le paramètre database mail xps
dans le groupe de paramètres qui correspond à l'édition et à la version de SQL Server utilisées par votre instance de base de données.
Pour activer Database Mail, définissez le paramètre database mail xps
sur 1.
L'exemple suivant modifie le groupe de paramètres que vous avez créé pour SQL Server Standard Edition 2016.
Pour modifier le groupe de paramètres
Connectez-vous à la AWS Management Console et ouvrez la console Amazon RDS à l'adresse https://console.aws.amazon.com/rds/
. -
Dans le volet de navigation, choisissez Groupes de paramètres.
-
Choisissez le groupe de paramètres, par exemple dbmail-sqlserver-se-13.
-
Sous Paramètres, filtrez la liste des paramètres pour
mail
. -
Choisissez database mail xps.
-
Choisissez Modifier les paramètres.
-
Saisissez
1
. -
Sélectionnez Save Changes.
L'exemple suivant modifie le groupe de paramètres que vous avez créé pour SQL Server Standard Edition 2016.
Pour modifier le groupe de paramètres
-
Utilisez l'une des commandes suivantes.
Pour Linux, macOS ou Unix :
aws rds modify-db-parameter-group \ --db-parameter-group-name
dbmail-sqlserver-se-13
\ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"Pour Windows :
aws rds modify-db-parameter-group ^ --db-parameter-group-name
dbmail-sqlserver-se-13
^ --parameters "ParameterName='database mail xps',ParameterValue=1
,ApplyMethod=immediate"
Association du groupe de paramètres à l'instance de base de données
Vous pouvez utiliser la AWS Management Console ou l'AWS CLI pour associer le groupe de paramètres Database Mail à l'instance de base de données.
Vous pouvez associer le groupe de paramètres Database Mail à une instance de base de données nouvelle ou existante.
-
Pour une nouvelle instance de base de données, associez-la lorsque vous lancez l'instance. Pour plus d'informations, consultez Création d'une instance de base de données Amazon RDS.
-
Pour une instance de base de données existante, associez-la en modifiant l'instance. Pour plus d'informations, consultez Modification d'une instance de base de données Amazon RDS.
Vous pouvez associer le groupe de paramètres Database Mail à une instance de base de données nouvelle ou existante.
Pour créer une instance de base de données avec le groupe de paramètres Database Mail
-
Spécifiez le type de moteur de base de données et la version majeure utilisés lors de la création du groupe de paramètres.
Pour Linux, macOS ou Unix :
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --db-instance-classdb.m5.2xlarge
\ --enginesqlserver-se
\ --engine-version13.00.5426.0.v1
\ --allocated-storage100
\ --master-user-passwordsecret123
\ --master-usernameadmin
\ --storage-typegp2
\ --license-modelli
--db-parameter-group-namedbmail-sqlserver-se-13
Pour Windows :
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-instance-classdb.m5.2xlarge
^ --enginesqlserver-se
^ --engine-version13.00.5426.0.v1
^ --allocated-storage100
^ --master-user-passwordsecret123
^ --master-usernameadmin
^ --storage-typegp2
^ --license-modelli
^ --db-parameter-group-namedbmail-sqlserver-se-13
Pour modifier une instance de base de données et associer le groupe de paramètres Database Mail
-
Utilisez l'une des commandes suivantes.
Pour Linux, macOS ou Unix :
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --db-parameter-group-namedbmail-sqlserver-se-13
\ --apply-immediatelyPour Windows :
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --db-parameter-group-namedbmail-sqlserver-se-13
^ --apply-immediately
Configuration de Database Mail
Pour configurer Database Mail, procédez comme suit :
Créez le profil Database Mail.
Créez le compte Database Mail.
Ajoutez le compte Database Mail au profil Database Mail.
Ajoutez des utilisateurs au profil Database Mail.
Pour configurer Database Mail, assurez-vous que vous disposez des autorisations execute
requises sur les procédures stockées de la base de données msdb
.
Création du profil Database Mail
Pour créer le profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_profile_spNotifications
.
Pour créer le profil
-
Utilisez l'instruction SQL suivante.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO
Création du compte Database Mail
Pour créer le compte Database Mail, vous devez utiliser la procédure stockée sysmail_add_account_spSES
qui utilise Amazon Simple Email Service.
L'utilisation d'Amazon SES nécessite les paramètres suivants :
-
@email_address
– Une identité vérifiée par Amazon SES. Pour plus d'informations, consultez Identités vérifiées dans Amazon SES. -
@mailserver_name
– Un point de terminaison SMTP Amazon SES. Pour plus d'informations, consultez Connexion à un point de terminaison SMTP Amazon SES. -
@username
– Un nom d'utilisateur SMTP Amazon SES. Pour plus d'informations, consultez Obtention des informations d'identification SMTP Amazon SES.N'utilisez pas de nom d'utilisateur AWS Identity and Access Management.
-
@password
– Un mot de passe SMTP Amazon SES. Pour plus d'informations, consultez Obtention des informations d'identification SMTP Amazon SES.
Pour créer le compte
-
Utilisez l'instruction SQL suivante.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SES', @description = 'Mail account for sending outgoing notifications.', @email_address = '
nobody@example.com
', @display_name = 'Automated Mailer', @mailserver_name = 'email-smtp.us-west-2
.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username
', @password = 'Smtp_Password
'; GO
Ajout du compte Database Mail au profil Database Mail
Pour ajouter le compte Database Mail au profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_profileaccount_spSES
au profil Notifications
.
Pour ajouter le compte au profil
-
Utilisez l'instruction SQL suivante.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO
Ajout d'utilisateurs au profil Database Mail
Pour autoriser un principal de base de données msdb
à utiliser un profil Database Mail, vous devez utiliser la procédure stockée sysmail_add_principalprofile_sp
L'exemple suivant accorde un accès public au profil Notifications
.
Pour ajouter un utilisateur au profil
-
Utilisez l'instruction SQL suivante.
USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO
Fonctions et procédures stockées Amazon RDS pour Database Mail
Microsoft fournit des procédures stockées
Procédure/Fonction | Description |
---|---|
rds_fn_sysmail_allitems | Affiche les messages envoyés, y compris ceux envoyés par d'autres utilisateurs. |
rds_fn_sysmail_event_log | Affiche les événements, y compris ceux des messages envoyés par d'autres utilisateurs. |
rds_fn_sysmail_mailattachments | Affiche les pièces jointes, y compris celles des messages envoyés par d'autres utilisateurs. |
rds_sysmail_control | Lance et arrête la file d'attente de la messagerie (processus DatabaseMail.exe). |
rds_sysmail_delete_mailitems_sp | Supprime des tables internes de Database Mail les e-mails envoyés par l'ensemble des utilisateurs. |
Envoi d'e-mails à l'aide de Database Mail
Pour envoyer des e-mails à l'aide de Database Mail, vous devez utiliser la procédure stockée sp_send_dbmail
Utilisation
EXEC msdb.dbo.sp_send_dbmail @profile_name = '
profile_name
', @recipients = 'recipient1@example.com
[;recipient2
; ...recipientn
]', @subject = 'subject
', @body = 'message_body
', [@body_format = 'HTML'], [@file_attachments = 'file_path1
;file_path2
; ...file_pathn
'], [@query = 'SQL_query'
], [@attach_query_result_as_file =0|1
]';
Les paramètres suivants sont obligatoires :
-
@profile_name
– Nom du profil Database Mail à partir duquel envoyer le message doit être envoyé. -
@recipients
– Liste des adresses e-mail, délimitées par des points-virgules, auxquelles le message doit être envoyé. -
@subject
– Objet du message. -
@body
– Corps du message. Vous pouvez également utiliser une variable déclarée comme corps.
Les paramètres suivants sont facultatifs :
-
@body_format
– Ce paramètre est utilisé avec une variable déclarée pour envoyer un e-mail au format HTML. -
@file_attachments
– Liste des pièces jointes de message délimitées par des points-virgules. Les chemins d'accès aux fichiers doivent être des chemins absolus. -
@query
– Requête SQL à exécuter. Les résultats de la requête peuvent être joints sous forme de fichier ou inclus dans le corps du message. -
@attach_query_result_as_file
– Permet d'indiquer si les résultats de la requête doivent être joints sous forme de fichier. À définir sur 0 pour si la réponse est négative et sur 1 si elle est positive. La valeur par défaut est 0.
Exemples
Les exemples suivants montrent comment envoyer des e-mails.
Exemple envoi d'un message à un seul destinataire
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Automated DBMail message - 1', @body = 'Database Mail configuration was successful.'; GO
Exemple envoi d'un message à plusieurs destinataires
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'recipient1@example.com;recipient2@example.com', @subject = 'Automated DBMail message - 2', @body = 'This is a message.'; GO
Exemple envoi d'un résultat de requête SQL sous forme de pièce jointe
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test SQL query', @body = 'This is a SQL query test.', @query = 'SELECT * FROM abc.dbo.test', @attach_query_result_as_file = 1; GO
Exemple envoi d'un message au format HTML
USE msdb GO DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test HTML message', @body = @HTML_Body, @body_format = 'HTML'; GO
Exemple envoi d'un message à l'aide d'un déclencheur lorsqu'un événement spécifique se produit dans la base de données
USE AdventureWorks2017 GO IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL DROP TRIGGER Purchasing.iProductNotification GO CREATE TRIGGER iProductNotification ON Production.Product FOR INSERT AS DECLARE @ProductInformation nvarchar(255); SELECT @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!' FROM INSERTED i; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'New product information', @body = @ProductInformation; GO
Affichage des messages, des journaux et des pièces jointes
Pour afficher les messages, les journaux d'événements et les pièces jointes, vous devez utiliser des procédures stockées RDS.
Pour afficher tous les e-mails
-
Utilisez la requête SQL suivante.
SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
Pour afficher les journaux d'événements des tous les e-mails
-
Utilisez la requête SQL suivante.
SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
Pour afficher toutes les pièces jointes
-
Utilisez la requête SQL suivante.
SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();
Suppression de messages
Pour supprimer des messages, vous devez utiliser la procédure stockée rds_sysmail_delete_mailitems_sp
.
RDS supprime automatiquement les éléments des tables de messagerie lorsque les données d'historique de Database Mail atteignent 1 Go, avec une période de conservation d'au moins 24 heures.
Si vous souhaitez conserver les éléments plus longtemps, vous pouvez les archiver. Pour plus d'informations, consultez Créer un travail SQL Server Agent pour archiver les messages et les journaux d'événements de Database Mail
Pour supprimer tous les e-mails
-
Utilisez l'instruction SQL suivante.
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
Pour supprimer tous les e-mails dotés d'un état particulier
-
Utilisez l'instruction SQL suivante pour supprimer tous les messages qui ont échoué.
DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO
Lancement de la file d'attente de messagerie
Pour lancer le processus Database Mail, vous devez utiliser la procédure stockée rds_sysmail_control
.
L'activation de Database Mail lance automatiquement la file d'attente de messagerie.
Pour lancer la file d'attente de messagerie
-
Utilisez l'instruction SQL suivante.
EXECUTE msdb.dbo.rds_sysmail_control start; GO
Arrêt de la file d'attente de messagerie
Pour arrêter le processus Database Mail, vous devez utiliser la procédure stockée rds_sysmail_control
.
Pour arrêter la file d'attente de messagerie
-
Utilisez l'instruction SQL suivante.
EXECUTE msdb.dbo.rds_sysmail_control stop; GO
Utilisation de pièces jointes
Les extensions de pièces jointes suivantes ne sont pas prises en charge dans les messages Database Mail à partir de RDS sur SQL Server : .ade, .adp, .apk, .appx, .appxbundle, .bat, .bak, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .inf1, .ins, .isp, .iso, .jar, .job, .js, .jse, .ldf, .lib, .lnk, .mde, .mdf, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps, .ps1, .psc1, .reg, .rgs, .scr, .sct, .shb, .shs, .svg, .sys, .u3p, .vb, .vbe, .vbs, .vbscript, .vxd, .ws, .wsc, .wsf et .wsh.
Database Mail utilise le contexte de sécurité Microsoft Windows de l'utilisateur actuel pour contrôler l'accès aux fichiers. Les utilisateurs qui se connectent avec l'authentification SQL Server ne peuvent pas joindre de fichiers à l'aide du paramètre @file_attachments
avec la procédure stockée sp_send_dbmail
. Windows n'autorise pas SQL Server à fournir des informations d'identification d'un ordinateur distant à un autre ordinateur distant. Par conséquent, Database Mail ne peut pas joindre des fichiers provenant d'un partage réseau lorsque la commande est exécutée à partir d'un ordinateur autre que celui qui exécute SQL Server.
Vous pouvez toutefois utiliser des tâches SQL Server Agent pour joindre des fichiers. Pour plus d'informations sur SQL Server Agent, consultez Utilisation de SQL Server Agent et SQL Server Agent
Considérations sur les déploiements multi-AZ
Lorsque vous configurez Database Mail sur une instance de base de données multi-AZ, la configuration n'est pas automatiquement propagée vers la zone secondaire. Nous vous recommandons de convertir l'instance multi-AZ en instance mono-AZ, de configurer Database Mail, puis de reconvertir l'instance de base de données en instance multi-AZ. Les nœuds principal et secondaire disposeront ensuite de la configuration de Database Mail.
Si vous créez un réplica en lecture à partir de l'instance multi-AZ sur laquelle Database Mail est configuré, le réplica hérite de la configuration, mais sans le mot de passe du serveur SMTP. Mettez à jour le compte Database Mail avec le mot de passe.