begin process at 2012 02 04 17:14:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > ENVOI DE MAIL SANS PROFIL MAPPY AVEC SQL SERVER 2000

ENVOI DE MAIL SANS PROFIL MAPPY AVEC SQL SERVER 2000


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Classé sous :mail, mappy, oacreate Niveau :Expert Date de création :25/03/2006 Date de mise à jour :26/03/2006 14:59:39 Vu / téléchargé :12 258 / 286

Auteur : Arnaud CLERET

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 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'

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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.

 Sources de la même categorie

Source avec Zip Source avec une capture SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATIO... par FENETRES
[SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONN... par Hyperion
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
REQUÊTE SQL POUR DÉTERMINER L'ESPACE OCCUPÉ DANS LES TABLESP... par sgoriaud
SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE par fabrice69

Commentaires et avis

Commentaire de moustachu le 29/05/2006 09:16:52

Bonjour,

Tu ne voudrais pas parler de Mapi plutôt que de Mappy ??

++
Moustachu

 Ajouter un commentaire


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&#233; g&#233;n&#233;rer et envoy&#233; 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,825 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales