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

Envoyer des e-mails avec des pièces jointes dans SQL Server (T-SQL)

SQL Server nous offre la possibilité d'envoyer des emails via sa solution Database Mail. Cela inclut un tas de procédures stockées qui facilitent la configuration et l'envoi d'e-mails.

Pour envoyer un e-mail, utilisez le sp_send_dbmail procédure stockée. Cette procédure accepte un tas d'arguments optionnels, dont l'un vous permet d'envoyer des pièces jointes.

En fait, il y a deux arguments qui vous permettent d'envoyer des pièces jointes. Celui que vous utiliserez dépendra du contexte.

Ce sont :

  • @file_attachments – Vous permet de spécifier un fichier à joindre à l'e-mail.
  • @attach_query_result_as_file – Ceci n'est applicable que si vous utilisez également @query pour envoyer par e-mail les résultats d'une requête.

Exemples ci-dessous.

Joindre un fichier

Le @file_attachments L'argument vous permet de spécifier un fichier à joindre à l'e-mail.

Voici un exemple :

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'The attached file contains all required data.',
    @file_attachments = '/var/opt/mssql/bak/Nature.bak',
    @subject = 'File attached as discussed';

La valeur doit inclure le chemin absolu vers le fichier.

Par défaut, la taille de fichier maximale est de 1 Mo par fichier, mais vous pouvez modifier cela avec le sysmail_configure_sp procédure stockée.

Joindre plusieurs fichiers

Vous pouvez joindre plusieurs fichiers en séparant chaque nom de fichier par un point-virgule :

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'The attached files contain all required data.',
    @file_attachments = '/var/opt/mssql/bak/Nature.bak;/var/opt/mssql/bak/World.bak',
    @subject = 'Files attached as discussed';

Comme mentionné, la limite de taille de fichier s'applique à chaque fichier. Ainsi, si la limite de taille de fichier est de 1 Mo, chaque fichier de cet exemple peut peser jusqu'à 1 Mo (ce qui donne une taille totale de 2 Mo pour les deux pièces jointes combinées).

Joindre les résultats d'une requête

Vous pouvez également utiliser la messagerie de base de données pour envoyer par e-mail le résultat d'une requête. Cela se fait avec le @query argument. Par défaut, les résultats sont répertoriés dans le corps de l'e-mail, mais vous pouvez les ajouter en pièce jointe si vous préférez.

Pour les ajouter en pièce jointe, définissez le @attach_query_result_as_file argument avec une valeur de 1 .

Voici un exemple d'envoi de résultats de requête en pièce jointe :

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @attach_query_result_as_file = 1,
    @subject = 'Query results as discussed';

De nombreuses options s'offrent à vous lorsque vous envoyez les résultats d'une requête par e-mail.

Par exemple, vous pouvez utiliser @query_attachment_filename pour spécifier le nom du fichier (s'il n'est pas spécifié, Database Mail en créera un). Vous pouvez également utiliser le @query_result_header argument pour spécifier si les en-têtes sont inclus ou non dans la requête, et vous pouvez utiliser le @query_result_no_padding argument pour supprimer tout rembourrage appliqué automatiquement aux résultats.