Send mail from SQL Server using Jmail
For greater information of this tool can obtain it in
http://www.dimac.net/
Mail in format HTML or TEXT can be sent can be sent attached archives.
It is a tool to send and to receive electronic mail from any PC or SERVER without the use of a program of mail or a mail server as Eudora, Exchange or Outlook
IF EXISTS (SELECT * FROM dbo.SYSOBJECTS
WHERE ID = OBJECT_ID(N'[dbo].[envia_mail]')
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[envia_mail]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROC envia_mail
/*=============================================================================================
Fecha......28/Nov/2003 Marco A. Serrano
Proposito..Enviar desde SQL Server Correo electronico usando Jmail
Input...@Vchsender WHO SENDS THE MESSAGE, (JPALACIOS@HOTMAIL.COM)
@Vchsendername NAME OF THAT SENDS THE MESSAGE(OPTIONAL), (JOSE LUIS PALACIOS)
@Vchrecipient To WHO IS SENT The MESSAGE, (BVELASCO@YAHOO.COM;JUMENDEZ@HOTMAIL.COM)
@VchrecipientBCC To WHO IS SENT HIDDEN COPY To HIM Of the MESSAGE(OPTIONAL),
@VchrecipientCC To WHO IS SENT COPY To HIM Of the MESSAGE(OPTIONAL),
@Vchattachment ATTACHED FILE (OPTIONAL), (C:\MY DOCUMENTS\MY.DOC)
@Vchsubject SUBJECT OF THE MESSAGE, MAXIMUM 255 CHARACTERS,
@Vchmailbody BODY OF THE MESSAGE, MAXIMUM 255 CHARACTERS,
@VchBodyPart IN ORDER TO ADD TEXT TO THE BODY OF THE MESSAGE,
@VchContentType CONTAINED TYPE(HTML ó TEXTO) OPTIONAL, IF IT IS NOT INCLUDED BY DEFAULT IT IS TEXT
output....Mail
NOTE: For greater information of this utileria can obtain it in http://www.dimac.net/
==============================================================================================
Date | modified | Intention
==============================================================================================*/
@Vchsender VARCHAR(100),
@Vchsendername VARCHAR(100)='',
@Vchrecipient VARCHAR(1000),
@VchrecipientBCC VARCHAR(1000)='',
@VchrecipientCC VARCHAR(1000)='',
@Vchattachment VARCHAR(100)='',
@Vchsubject VARCHAR(255),
@Vchmailbody VARCHAR(255),
@VchBodyPart VARCHAR(8000),
@VchContentType VARCHAR(50)=''
AS
--VARIABLES PARA DESGLOSAR LA LISTA DE DESTINATARIOS Y/O PARA DIVIDIR LA VARIABLE @VchBodyPart E INSERTAR TEXTO
--AL CUERPO DEL MENSAJE CUENDO ESTE SOBREPASE LOS 255 CARACTERES
DECLARE @Vchstring VARCHAR(8000), @Vchstring_length INT, @VchstrToEmail VARCHAR(255),
@Vchsubstring NVARCHAR(50), @Intstartpos INT, @Intendpos INT
--VARIABLES PARA EL OBJECTO JMAIL
DECLARE@Intobject INT, @hr INT, @Intrc INT, @Vchoutput VARCHAR(400),
@Vchdescription VARCHAR(400), @Vchsource VARCHAR(400),
@Vchdominio VARCHAR(100),--SERVIDOR DE DOMINIO (CCPUEBLA.COM.MX)
@Vchserveraddress VARCHAR(255)--DIRECCION O NOMBRE DEL SERVIDOR PROXI
SET NOCOUNT ON
BEGIN TRAN
--OBTENEMOS EL DOMINIO Y DIRECCION DEL SERVIDOR DE CORREO
SELECT @Vchdominio = RTRIM(servidor_dominio), @Vchserveraddress = RTRIM(servidor_direccion)
FROM configuracion_servidor_proxi
--CREA UNA INSTANCIA DEL OBJETO "jmail.smtpmail" EN UNA INSTANCIA DE MICROSOFT SQL SERVER
--Y ESTABLECE LOS VALORES DE LAS PROPIEDADES DEL OBJETO "jmail.smtpmail"
EXEC @hr = SP_OACreate 'jmail.smtpmail', @Intobject OUT --Crea el objeto
EXEC @hr = sp_OASetProperty @Intobject, 'ISOEncodeHeaders', 'false' --Decodifica caracteres segun el standard iso-8859-1
EXEC @hr = sp_OASetProperty @Intobject, 'charset', 'iso-8859-1' --Setea a caracteres iso-8859-1
EXEC @hr = sp_OASetProperty @Intobject, 'Maildomain', @Vchdominio
EXEC @hr = sp_OASetProperty @Intobject, 'Logging', true
EXEC @hr = SP_OASetProperty @Intobject, 'Sender', @Vchsender
EXEC @hr = SP_OASetProperty @Intobject, 'ServerAddress', @Vchserveraddress
--SI SE REQUIERE FORMATO HTML
IF @VchContentType <> ''
EXEC @hr = SP_OASetProperty @Intobject, 'ContentType', @VchContentType --Para convertir el cuerpo del mensaje a formato HTML
-- ADICIONA LA LISTA DE CORREO ELECTRONICO AL METODO "ADDRECIPIENT" ESTE WHILE ES PARA PREVENIR
-- ENVIAR A VARIOS DESTINATARIOS
SELECT @Vchsubstring = ''
SELECT @Vchstring = @Vchrecipient
SELECT @Vchstring_length = len(@Vchstring)
SELECT @Intstartpos = 1
SELECT @Intendpos = 1
WHILE @Intstartpos <= @Vchstring_length and @Intendpos <= @Vchstring_length + 1
BEGIN
IF SUBSTRING(@Vchstring,@Intendpos,1) = ';' or @Intendpos > @Vchstring_length
BEGIN
SELECT @VchstrToEmail = SUBSTRING(@Vchstring,@Intstartpos,@Intendpos-@Intstartpos)
EXEC @hr = SP_OAMethod @Intobject, 'AddRecipient', NULL , @VchstrToEmail
SELECT @Intstartpos = @Intendpos + 1
SELECT @Intendpos = @Intstartpos + 1
END
SELECT @Intendpos = @Intendpos + 1
END
--INSERTAMOS EL ASUNTO Y CUERPO DEL MENSAJE
EXEC @hr = SP_OASetProperty @Intobject, 'Subject', @Vchsubject
--INSERTAMOS EL CUERPO DEL MENSAJE
EXEC @hr = SP_OASetProperty @Intobject, 'Body', @Vchmailbody
--SI ES MAS GRANDE EL CUERPO DEL MENSAJE ADICIONAMOS EL TEXTO EXTRA
SELECT @Vchsubstring = ''
SELECT @Vchstring = @VchBodyPart
SELECT @Vchstring_length = 8000--len(@Vchstring)
SELECT @Intstartpos = 1
SELECT @Intendpos = 80
WHILE @Intendpos <= @Vchstring_length
BEGIN
SELECT @VchBodyPart = SUBSTRING(@Vchstring,@Intstartpos,80)
IF Len(@VchBodyPart) = 0
BEGIN
BREAK;
END
EXEC @hr = sp_OAMethod @Intobject, 'AppendText', null, @VchBodyPart
SELECT @Intstartpos = @Intendpos + 1
SELECT @Intendpos = @Intendpos + 80
END
--SI EL MENSAJE VA EN FORMATO HTML CIERRA EL CUERPO DEL MENSAJE
IF @VchContentType = 'text/html'
BEGIN
SELECT @VchBodyPart = '</FONT></BODY></HTML>'
EXEC @hr = sp_OAMethod @Intobject, 'AppendText', null, @VchBodyPart
END
--SI SE NECESITARA ENVIAR UN ARCHIVO ADJUNTO
IF NOT(@Vchattachment='')
EXEC @hr = sp_OAMethod @Intobject, 'Addattachment', NULL , @Vchattachment
--SI SE REQUIERE ENVIAR UNA COPIA DEL MENSAJE OCULTA
IF NOT(@VchrecipientBCC='')
EXEC @hr = sp_OAMethod @Intobject, 'AddRecipientBCC', NULL , @VchrecipientBCC
--SI SE REQUIERE ENVIAR ADEMAS COPIAS DEL MENSAJE
IF NOT(@VchrecipientCC='')
EXEC @hr = sp_OAMethod @Intobject, 'AddRecipientCC', NULL , @VchrecipientCC
--PARA ENVIAR EL NOMBRE DE LA PERSONA QUE ENVIA EL MENSAJE
IF NOT(@Vchsendername='')
EXEC @hr = sp_OASetProperty @Intobject, 'SenderName', @Vchsendername
--EJECUTAMOS EL OBJETO CREADO PARA ENVIAR EL CORREO
EXEC @hr = sp_OAMethod @Intobject, 'execute', NULL
--CACHAMOS POSIBLES ERRORES
EXEC @hr = sp_OAGetErrorInfo @Intobject, @Vchsource OUT, @Vchdescription OUT
IF @hr <> 0
BEGIN
IF @@TRANCOUNT > 0 ROLLBACK TRAN
EXEC @hr = SP_OADestroy @Intobject
RAISERROR (@Vchdescription , 16, 1)
RETURN
END
--DESTRUIMOS EL OBJETO CREADO
EXEC @hr = SP_OADestroy @Intobject
COMMIT TRAN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
GRANT EXECUTE ON [dbo].[envia_mail] TO [public]
GO