Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Trigger envío de email

Estas en el tema de Trigger envío de email en el foro de SQL Server en Foros del Web. Buenas, Estoy haciendo un trigger para que me envíe un email cuando se inserte un registro en una tabla. Adjunto código: Código: ALTER TRIGGER [dbo].[CONTACTOEMAIL] ...
  #1 (permalink)  
Antiguo 14/06/2011, 04:56
 
Fecha de Ingreso: junio-2011
Mensajes: 18
Antigüedad: 12 años, 10 meses
Puntos: 0
Pregunta Trigger envío de email

Buenas,

Estoy haciendo un trigger para que me envíe un email cuando se inserte un registro en una tabla. Adjunto código:

Código:
ALTER TRIGGER [dbo].[CONTACTOEMAIL]
ON [dbo].[contacto]
FOR INSERT
AS
-- Comprobar sí se tiene que enviar el mail.
If EXISTS (SELECT * FROM Inserted)
begin

-- Obtener datos del tícket

declare @i_tck int
declare @nombre nvarchar(128)
declare @empresa nvarchar(128)
declare @email nvarchar(128)
declare @s_mailmess nvarchar(768)
declare @comentarios nvarchar(300)
declare @p_gestion nvarchar(40)
declare @p_trazabilidad nvarchar(40)

SELECT @nombre =  I.NOMBRE
FROM INSERTED I 

SELECT @empresa =  I.EMPRESA
FROM INSERTED I 

SELECT @email =  I.email
FROM INSERTED I

SELECT @p_gestion =  I.p_gestion
FROM INSERTED I

SELECT @p_trazabilidad =  I.p_trazabilidad
FROM INSERTED I


SELECT @comentarios =  I.comentarios
FROM INSERTED I




    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;FECHA: ' +  CONVERT(nvarchar(32), GETDATE(), 113) + '<br>'
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;NOMBRE: ' + @nombre + '<br>'
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;EMPRESA: ' +  @empresa + '<br>'	
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;EMAIL: ' +  @email + '<br>'
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;SOFTWARE TRAZABILIDAD: ' + @p_trazabilidad + '<br>'
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;SOFTWARE GESTIÓN: ' +  @p_gestion + '<br>'
    SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;COMENTARIOS:: ' +  @comentarios + '<br>'

	-- Enviar por correo.
	
	EXEC msdb.dbo.sp_send_dbmail @profile_name='Sistemas',
    @recipients= '[email protected]',
    @subject=  '[CONTACTO WEB]',
    @body= @s_mailmess;
    
    
     
    
end
El problema es que el email me llega vació, como si la variable s_mailmess no contuviera nada.

En cambio, si en el body envío la variable @nombre, recibo el mail con el contenido del campo nombre

¿A qué puede deberse?

Saludos.
  #2 (permalink)  
Antiguo 14/06/2011, 10:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Trigger envío de email

Hola JrScaletta:

Creo que el problema está en que nunca inicializas el valor de tu variable s_mailmess, por lo tanto al inicio tiene un valor de NULL y al concatenar null con cualquier cadena el resultado es NULL...

Prueba poniendo esto:

Código SQL:
Ver original
  1. DECLARE @s_mailmess nvarchar(768)
  2. --Para inicializar la variable
  3. SET @s_mailmess = ''
  4. SET @s_mailmess = @s_mailmess + '&nbsp;&nbsp;FECHA: ' +  CONVERT(nvarchar(32), GETDATE(), 113) + '<br>'
  5. ...

o simplemente, en el primero de tus select's donde estás concatenando el cuerpo del correo en lugar no concatenes nuevamente la variable @s_mailmess, para que se asigne el texto por primera vez:

Código SQL:
Ver original
  1. --En el primer select no acumulamos el contenido de la variable
  2. SELECT @s_mailmess = '&nbsp;&nbsp;FECHA: ' +  CONVERT(nvarchar(32), GETDATE(), 113) + '<br>'
  3. --a partir del segundo select sí acumulamos el contenido
  4. SELECT @s_mailmess = @s_mailmess + '&nbsp;&nbsp;NOMBRE: ' + @nombre + '<br>'
  5. ...

haz la prueba y nos comentas

Es recomendable que siempre que declares alguna variable le asignes un valor inicial antes de hacer operaciones.

Saludos
Leo.
  #3 (permalink)  
Antiguo 14/06/2011, 13:10
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Trigger envío de email

¿Enviar MAILS desde un trigger?, bueno.......aunque no lo aconsejo....
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 15/06/2011, 03:34
 
Fecha de Ingreso: junio-2011
Mensajes: 18
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: Trigger envío de email

Perfecto leonardo_josue, así recibo el mail con los datos insertados, aunque en un formato de difícil lectura. No me respeta los espacios ni los saltos de líneas:

&nbsp;&nbsp;FECHA: 15 Jun 2011 11:32:34:547<br>&nbsp;&nbsp;NOMBRE: RUbén <br>&nbsp;&nbsp;EMPRESA: Neodata <br>&nbsp;&nbsp;EMAIL: [email protected]<br>&nbsp;&nbsp;SOFTWARE TRAZABILIDAD: Si <br>&nbsp;&nbsp;SOFTWARE GESTIÓN: Navision <br>&nbsp;&nbsp;COMENTARIOS:: dasd<br>

¿Cómo podría arreglarlo?

Saludos.
  #5 (permalink)  
Antiguo 15/06/2011, 08:38
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Trigger envío de email

Hola de nuevo JrScaletta:

Te recuerdo que antes de acudir a los foros debes tratar de buscar la respuesta por tu propia cuenta, ya sea en GOOGLE o en cualquier otro buscador o aquí mismo en este foro, utilizando las herramientas de búsqueda. Si hubieras hecho esto, creo que no hubieras tardado mucho en encontrar la respuesta:


sp_send_dbmail (Transact-SQL)


Cita:
[ @body_format= ] 'body_format'
Formato del cuerpo del mensaje. El parámetro es de tipo varchar(20) y su valor predeterminado es NULL. Si se especifica, los encabezados del mensaje saliente indican que el cuerpo del mensaje tiene el formato especificado. El parámetro puede contener uno de los siguientes valores:

TEXT

HTML

El valor predeterminado es TEXT.
Es decir, para que te respete las etiquetas de HTML para los espacios y los saltos de líneas debes especificarle al SP que el formato del cuerpo es HTML.

Saludos
Leo.

Etiquetas: email, trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:08.