Share via


sp_processmail (Transact-SQL)

Utilise des procédures stockées étendues (xp_findnextmsg, xp_readmail et xp_deletemail) pour traiter des messages électroniques entrants dans la boîte de réception pour MicrosoftSQL Server. Chaque message ne doit contenir qu'une seule requête dans le corps du message. Cette procédure utilise la procédure stockée étendue xp_sendmail pour renvoyer l'ensemble de résultats sous forme de pièce jointe à l'expéditeur du message.

Important

Évitez d'utiliser cette procédure. La procédure sp_processmail traite les informations envoyées par courrier électronique qui proviennent de sources inconnues ; elles peuvent être utilisées pour introduire un code malveillant dans votre environnement. Vous devez faire preuve d'une extrême prudence pour valider le code avant de l'exécuter. Cette procédure a été prévue dans un souci de compatibilité descendante et ne s'installe qu'au moment où vous activez SQL Mail.

[!REMARQUE]

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

sp_processmail [ [ @subject = ] 'subject' ] 
     [ , [ @filetype = ] 'filetype' ] 
     [ , [ @separator = ] 'separator' ] 
     [ , [ @set_user = ] 'user' ] 
     [ , [ @dbuse = ] 'dbname' ]

Arguments

  • [ @subject = ] 'subject'
    Ligne d'objet des messages électroniques à interpréter comme des requêtes devant être traitées par SQL Server. L'argument subject est de type varchar(255), avec NULL comme valeur par défaut. Quand il est spécifié, la procédure sp_processmail ne traite que les messages ayant cet objet. Par défaut, SQL Server traite tous les messages électroniques comme si leur corps de message contenait une requête.

  • [ @filetype = ] 'filetype'
    Extension de fichier à utiliser lorsque l'ensemble de résultats de la requête est renvoyé à l'expéditeur du message sous la forme d'une pièce jointe. filetype est de type varchar(3), avec « txt » comme valeur par défaut.

  • [ @separator = ] 'separator'
    Séparateur de colonnes (indicateur de fin de champ) pour chaque colonne de l'ensemble de résultats. Cette information est transmise à la procédure stockée étendue xp_sendmail afin de renvoyer l'ensemble de résultats à l'expéditeur du message. L'argument separator est de type varchar(3), avec comme valeur par défaut « tab », une casse spéciale pour le caractère de tabulation qui s'utilise entre les colonnes.

  • [ @set_user = ] 'user'
    Contexte de sécurité dans lequel la requête doit être exécutée. user est de type varchar(132), avec guest comme valeur par défaut.

  • [ @dbuse = ] 'dbname'
    Contexte de la base de données dans lequel la requête doit être exécutée. L'argument dbname est de type varchar(132), avec master comme valeur par défaut.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Ensembles de résultats

Aucun

Notes

Les messages électroniques entrants sont supposés contenir une seule requête SQL Server valide dans le texte du message. La procédure sp_processmail gère uniquement les messages non lus. Les résultats de la requête sont renvoyés à l'expéditeur du message et une copie est adressée à tous les utilisateurs de courrier électronique figurant sur la liste Cc du message original. Une fois traités, les messages sont supprimés de la boîte de réception. Si le serveur reçoit souvent des messages électroniques, il est conseillé d'exécuter sp_processmail fréquemment. Pour configurer un traitement régulier des messages électroniques, vous pouvez utiliser l'Agent SQL Server pour planifier un travail sp_processmail. Celui-ci traite le courrier électronique selon une fréquence spécifiée et enregistre un message d'information comportant le nombre de requêtes traitées dans l'historique du travail.

Les résultats sont envoyés sous forme de fichier joint. Le nom complet du fichier de l'envoi se compose de la chaîne « Sql » suivie d'une chaîne aléatoire de nombres et de l'extension de fichier spécifiée, par exemple Sql356.txt.

Important

Pour que le message électronique soit accompagné de l'icône appropriée, assurez-vous que le type de fichier est correctement associé. Pour créer une association de fichier, double-cliquez sur Poste de travail sur le Bureau puis, dans le menu Outils, sélectionnez Options des dossiers. Dans l'onglet Types de fichiers, dans la boîte de dialogue Options des dossiers, spécifiez l'application à utiliser pour ouvrir le fichier.

Différents travaux de la procédure sp_processmail peuvent être configurés pour des requêtes dans différentes bases de données. Vous pouvez décider par exemple que les requêtes envoyées à la base de données AdventureWorks doivent avoir pour objet « SQL:AdventureWorks ». Vous pouvez ensuite exécuter la procédure sp_processmail en définissant la valeur de subject à SQL:AdventureWorks et celle de dbname à AdventureWorks. Des requêtes et regroupements différents de base de données peuvent avoir d'autres structures de formatage. Par exemple, les tâches de distribution peuvent avoir un subject égal à SQL:distribution et un dbname égal àdistribution. Toutes ces tâches peuvent être planifiées à l'aide de l'Agent SQL Server.

La procédure stockée système sp_processmail peut également être personnalisée de nombreuses façons : en récupérant le texte de la procédure à l'aide de la procédure stockée système sp_helptext, en modifiant le code Transact SQL et en créant une nouvelle procédure avec un comportement personnalisé. Les modifications possibles sont les suivantes :

  • Ne traiter que certains types de messages personnalisés en utilisant le paramètre @type avec la procédure stockée étendue xp_findnextmsg.

  • Signalez le message comme read, mais ne le supprimez pas après traitement (exécutez xp_readmail une deuxième fois en affectant à peek la valeur false).

  • Envoyez les résultats de la requête dans le corps du message électronique en appelant xp_sendmail avec attach_result défini à false et en supprimant le paramètre attachments.

  • Définir le contexte de sécurité afin que la requête soit effectuée dans un contexte utilisateur basé sur l'identité de l'auteur du message. Si les noms d'utilisateurs de messagerie électronique sont les mêmes que ceux utilisés par SQL Server, il suffit de modifier l'appel à la procédure xp_sendmail pour utiliser set_user = @originator. Si les noms d'utilisateurs de messagerie électronique ne sont pas des noms d'utilisateurs SQL Server valides (par exemple, s'ils incluent des espaces), vous pouvez alors faire une recherche dans une table ou effectuer une substitution de caractères de manière à ce que le nom d'utilisateur SQL Server approprié soit transmis à xp_sendmail.

Autorisations

Seuls les membres du rôle de serveur fixe sysadmin peuvent exécuter cette procédure.

Exemple

L'exemple suivant traite tous les messages de la boîte de réception comme des requêtes à exécuter dans la base de données AdventureWorks. Les jeux de résultats sont renvoyés au client au format CSV (valeurs séparées par des virgules).

EXEC sp_processmail
    @filetype = 'CSV'
    ,@separator = ','
    ,@dbuse = 'AdventureWorks';