Accueil > > > ENVOI DE MAIL SANS PROFIL MAPPY AVEC SQL SERVER 2000
ENVOI DE MAIL SANS PROFIL MAPPY AVEC SQL SERVER 2000
Information sur la source
Description
Suite à de nombreuses questions sur le sujet dans les différents forums, voici une procédure stockée permettant d'envoyer un mail depuis SQL Server 2000 et ce sans profil mappy. Le script procède tout d'abord à la création d'une erreur personnalisée correspondant aux cas d'échec de l'envoi de mail puis à la création de la procédure stockée sp_sendMail basée sur l'objet CDO au travers des procédures styockées du type sp_OACreate ... Si vous exécutez ce script la procédure sera créée dans la base master puisqu'a l'époque où je l'ai écrite elle était destinée à l'administration et la supervision du serveur sur lequel elle était déployée. Dans tous les cas, testez toujours un code avant de le livrer sur un serveur de production.
Source
- --------------------------------------------------------------------------
- -- Script created in November 25 2003 by Arnaud CLERET --
- -- This store procedure allow to send a mail without a mappy profil --
- --------------------------------------------------------------------------
-
- USE master
- GO
-
- DECLARE @WithLogEvent VARCHAR(5)
- DECLARE @ReplaceMessage VARCHAR(7)
-
- SET @WithLogEvent = 'false'
- SET @ReplaceMessage = 'REPLACE'
-
- EXECUTE sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = N'Error during sending mail (Source : %s --- Description : %s).', @lang = 'us_english', @with_log = @WithLogEvent, @replace = @ReplaceMessage
- EXECUTE sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = N'Erreur lors de l''envoie du mail (Source : %1! --- Description : %2!)', @lang = 'French', @with_log = @WithLogEvent, @replace = @ReplaceMessage
- GO
-
- SET QUOTED_IDENTIFIER OFF
- GO
- SET ANSI_NULLS ON
- GO
- CREATE PROCEDURE dbo.sp_sendMail
- (
- @MailFrom VARCHAR(50) = @@SERVERNAME,
- @MailTo VARCHAR(255) = 'mail@demo.com',
- @MailCc VARCHAR(255) = NULL,
- @MailBcc VARCHAR(255) = NULL,
- @MailSubject VARCHAR(500) = NULL,
- @MailBody VARCHAR(8000) = NULL,
- @IsHTMLBody BIT = 0,
- @FilesAttachments VARCHAR(8000) = NULL,
- @FilesAttachmentsDelimiter CHAR(1) = ';',
- @SendUsing CHAR(1) = '2',
- @SMTPServerName VARCHAR(15) = '192.168.0.1',
- @SMTPServerPort VARCHAR(5) = '25'
- )
- AS
- BEGIN
- SET NOCOUNT ON
-
- DECLARE @FilePath VARCHAR(255)
- DECLARE @StatusRetour INT
- DECLARE @CdoObject INT
- DECLARE @ErrorSource NVARCHAR(255)
- DECLARE @ErrorDescription NVARCHAR(500)
-
- EXECUTE @StatusRetour = sp_OACreate 'CDO.Message', @CdoObject OUTPUT
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'From', @MailFrom
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'To', @MailTo
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- IF(@MailCc IS NOT NULL)
- BEGIN
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Cc', @MailCc
- IF (@StatusRetour <> 0) GOTO ErrorHandler
- END
-
- IF(@MailBcc IS NOT NULL)
- BEGIN
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Bcc', @MailBcc
- IF (@StatusRetour <> 0) GOTO ErrorHandler
- END
-
- IF(@MailSubject IS NOT NULL)
- BEGIN
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Subject', @MailSubject
- IF (@StatusRetour <> 0) GOTO ErrorHandler
- END
-
- IF(@MailBody IS NOT NULL)
- BEGIN
- IF(@IsHTMLBody = 0)EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'TextBody', @MailBody
- ELSE EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'HTMLBody', @MailBody
- IF (@StatusRetour <> 0) GOTO ErrorHandler
- END
-
- IF (@FilesAttachments IS NOT NULL)
- BEGIN
- SET @FilesAttachments = LTrim(RTrim(@FilesAttachments))
- WHILE(DATALENGTH(@FilesAttachments) > 0)
- BEGIN
- IF(CHARINDEX(@FilesAttachmentsDelimiter,@FilesAttachments) > 0)
- BEGIN
- SET @FilePath = SUBSTRING(@FilesAttachments,1, CHARINDEX(@FilesAttachmentsDelimiter,@FilesAttachments)-1)
- SET @FilesAttachments = LTrim(Right(@FilesAttachments,DATALENGTH(@FilesAttachments) - DATALENGTH(@FilePath + @FilesAttachmentsDelimiter)))
- EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'AddAttachment', NULL, @FilePath
- END
- ELSE
- BEGIN
- SET @FilePath = @FilesAttachments
- EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'AddAttachment', NULL, @FilePath
- BREAK
- END
- END
- END
-
-
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value', @SendUsing
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @SMTPServerName
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value', @SMTPServerPort
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'Configuration.Fields.Update'
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'Send'
- IF (@StatusRetour <> 0) GOTO ErrorHandler
-
- EXECUTE sp_OADestroy @CdoObject
- RETURN
-
- ErrorHandler:
- EXECUTE @StatusRetour = sp_OAGetErrorInfo @CdoObject, @ErrorSource OUT, @ErrorDescription OUT
- IF (@StatusRetour = 0)RAISERROR (50001, 16, 1, @ErrorSource, @ErrorDescription)
- ELSE RAISERROR('Error in sp_sendMail !',16,1)
- EXECUTE sp_OADestroy @CdoObject
- RETURN
- END
- GO
- SET QUOTED_IDENTIFIER OFF
- GO
- SET ANSI_NULLS ON
- GO
--------------------------------------------------------------------------
-- Script created in November 25 2003 by Arnaud CLERET --
-- This store procedure allow to send a mail without a mappy profil --
--------------------------------------------------------------------------
USE master
GO
DECLARE @WithLogEvent VARCHAR(5)
DECLARE @ReplaceMessage VARCHAR(7)
SET @WithLogEvent = 'false'
SET @ReplaceMessage = 'REPLACE'
EXECUTE sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = N'Error during sending mail (Source : %s --- Description : %s).', @lang = 'us_english', @with_log = @WithLogEvent, @replace = @ReplaceMessage
EXECUTE sp_addmessage @msgnum = 50001, @severity = 16, @msgtext = N'Erreur lors de l''envoie du mail (Source : %1! --- Description : %2!)', @lang = 'French', @with_log = @WithLogEvent, @replace = @ReplaceMessage
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE dbo.sp_sendMail
(
@MailFrom VARCHAR(50) = @@SERVERNAME,
@MailTo VARCHAR(255) = 'mail@demo.com',
@MailCc VARCHAR(255) = NULL,
@MailBcc VARCHAR(255) = NULL,
@MailSubject VARCHAR(500) = NULL,
@MailBody VARCHAR(8000) = NULL,
@IsHTMLBody BIT = 0,
@FilesAttachments VARCHAR(8000) = NULL,
@FilesAttachmentsDelimiter CHAR(1) = ';',
@SendUsing CHAR(1) = '2',
@SMTPServerName VARCHAR(15) = '192.168.0.1',
@SMTPServerPort VARCHAR(5) = '25'
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @FilePath VARCHAR(255)
DECLARE @StatusRetour INT
DECLARE @CdoObject INT
DECLARE @ErrorSource NVARCHAR(255)
DECLARE @ErrorDescription NVARCHAR(500)
EXECUTE @StatusRetour = sp_OACreate 'CDO.Message', @CdoObject OUTPUT
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'From', @MailFrom
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'To', @MailTo
IF (@StatusRetour <> 0) GOTO ErrorHandler
IF(@MailCc IS NOT NULL)
BEGIN
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Cc', @MailCc
IF (@StatusRetour <> 0) GOTO ErrorHandler
END
IF(@MailBcc IS NOT NULL)
BEGIN
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Bcc', @MailBcc
IF (@StatusRetour <> 0) GOTO ErrorHandler
END
IF(@MailSubject IS NOT NULL)
BEGIN
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Subject', @MailSubject
IF (@StatusRetour <> 0) GOTO ErrorHandler
END
IF(@MailBody IS NOT NULL)
BEGIN
IF(@IsHTMLBody = 0)EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'TextBody', @MailBody
ELSE EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'HTMLBody', @MailBody
IF (@StatusRetour <> 0) GOTO ErrorHandler
END
IF (@FilesAttachments IS NOT NULL)
BEGIN
SET @FilesAttachments = LTrim(RTrim(@FilesAttachments))
WHILE(DATALENGTH(@FilesAttachments) > 0)
BEGIN
IF(CHARINDEX(@FilesAttachmentsDelimiter,@FilesAttachments) > 0)
BEGIN
SET @FilePath = SUBSTRING(@FilesAttachments,1, CHARINDEX(@FilesAttachmentsDelimiter,@FilesAttachments)-1)
SET @FilesAttachments = LTrim(Right(@FilesAttachments,DATALENGTH(@FilesAttachments) - DATALENGTH(@FilePath + @FilesAttachmentsDelimiter)))
EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'AddAttachment', NULL, @FilePath
END
ELSE
BEGIN
SET @FilePath = @FilesAttachments
EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'AddAttachment', NULL, @FilePath
BREAK
END
END
END
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value', @SendUsing
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', @SMTPServerName
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OASetProperty @CdoObject, 'Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value', @SMTPServerPort
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'Configuration.Fields.Update'
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE @StatusRetour = sp_OAMethod @CdoObject, 'Send'
IF (@StatusRetour <> 0) GOTO ErrorHandler
EXECUTE sp_OADestroy @CdoObject
RETURN
ErrorHandler:
EXECUTE @StatusRetour = sp_OAGetErrorInfo @CdoObject, @ErrorSource OUT, @ErrorDescription OUT
IF (@StatusRetour = 0)RAISERROR (50001, 16, 1, @ErrorSource, @ErrorDescription)
ELSE RAISERROR('Error in sp_sendMail !',16,1)
EXECUTE sp_OADestroy @CdoObject
RETURN
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Conclusion
La procédure permet de l'appeler selon de nombreux paramètres, pas tous obligatoires et possédant des valeurs par défaut selon si vous souhaitez y inclure une pièce jointe, des destinataires en CC ...
L'appel de la procédure peut se faire de la manière suivante : EXECUTE master.dbo.sp_sendMail @MailFrom = 'mailFrom@demo.com', @MailTo = 'mailTo@demo.com', @MailSubject = 'Alerte', @MailBody = 'Corp du message'
Historique
- 25 mars 2006 14:04:47 :
- Quelques petites corrections d'orthographe sur le post :)
- 26 mars 2006 14:59:40 :
- Ajout d'un exemple d'appel de la procédure stockée d'envoi de mail.
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Petit porblème [ par titeuf974 ]
Bonjour! Alors voila. G une table client dans laquelle g un champ verif_mail, qui contient une clé générer et envoyé par mail au c
Envoi de mail [ par Online ]
Bonjour, Je voudrais savoir si vous connaissez une procédure stockée qui permettrait d'envoyer des mails à une liste de personnes provenant d'un SELEC
sql serveur 2005 + mail + @profil_name ! [ par jimmy69 ]
Bonjour,J'essayes d'envoyer un mail avec ms sql serveur 2005 et qd je lance la requete ci dessous il me dit que le profil (profil name) n'existe pas !
envoi mail si lot dts ok [ par xzonz ]
Salut a tous et toutesvoici ma questionj'ai un lot dts qui exporte une table dans un fichier texteca fonctionnej'ai ensuite planifie le lot pour etre
DTS et Alertes Mail [ par elsuket ]
Bonjour à tous,Je viens de créer un DTS qui:1) Supprime un fichier dans un répertoire du serveur,2) Télécharge un fichier sur le serveur,3) Intègre ce
Plan de Maintenance SQL2005 [ par odenisf59 ]
Bonjour,Mon premier message dans la communauté et j'espere apporté aussi à a communautémon "probleme"Sous SQL 2005 il y possibilité de faire des plan
Envoie d'un mail lors d'une insertion de donnée [ par orzechowski ]
Bonjour,Je voudrais envoyer un mail automatiquement lorsqu'une donnée est entrée dans une table d'une base de donnée sql server 2000.Pour l'instant, j
Sql Mail [ par amikove ]
Salut tout le mondej'ai besoin de progammer un envoi d'un mail depuis un Trigger, mais je sais pas comment faire.si Quelq'un peut me donner la demarch
Accéder à un serveur mail a distance [ par xale ]
Bonjour,je tiens une base de donnée et je dois envoyer un message à toute personne s'inscrivant à ma nouvelle baseet je ne sais comment y procéder sac
Pourquoi je ne peux pas utiliser les commandes xp_...mail? [ par RvSpeed ]
Bonjour à tous,Je suis sur windows 2003 serveur sp3, avec SQL serveur 2005 Standard édition et je ne peux pas utiliser les commandes comme xp_sendmail
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|