SQL Server - Mandar mail desde SQL Server

 
Vista:
sin imagen de perfil

Mandar mail desde SQL Server

Publicado por Marcelo (3 intervenciones) el 16/02/2016 14:04:40
Buenas Estimados.
He desarrollado una aplicacion en VFP 9 + SQL Server 2012 y ahora me piden que cada vez que cambie el estado de un pedido se mande un mail informando esto al usuario que lo realizo.
Para esto he generado un Tigger en la tabla Detalles de Pedido que cuando cambia el estado me inserta un registro en otra tabla con los datos para mandar el mail.

La idea es generar un Job que cada 15 minutos revise esa tabla y si hay registros, los mande por mail a cada destinatario. Al finalizar, debe eliminar los registros de dicha tabla.
También debería controlar que no sean más de 50 registros (mails) por cada 15 minutos para evitar tener problemas con mi servidor SMTP.

Para hacer un job no tengo problema, pero no se bien como hacer el cuerpo del job para que tome los datos de cada registro y los mande por mail.

Encontre esto en internet para mandar mail desde SQL Server

EXEC msdb.dbo.sp_send_dbmail
@recipients='direccion',

@subject = 'asd',
@body = @aux,
@body_format = 'HTML'

pero como le voy pasando los datos de cada registro?

Alguien me puede ayudar?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Mandar mail desde SQL Server

Publicado por Isaias (4558 intervenciones) el 16/02/2016 17:40:57
¿Buscaste en GOOGLE?

https://www.google.com.mx/#q=sql+server+2012+send+a+message+to+mail+in+format+html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Mandar mail desde SQL Server

Publicado por Marcelo (3 intervenciones) el 16/02/2016 18:26:52
Hola, si lo he buscado, pero he visto que usan cursores y en muchos lados dice que no se deben usar.
Al final lo resolvi de esta forma sin cursores:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Declare @min int = 0
Declare @max int = 0
Declare @cantidad int = 0
 
declare @xdescrip varchar(450)
declare @xfecha datetime
declare @xasunto varchar(50)
declare @xmail varchar(65)
 
select @min=min(PedidosMailEstado.idpedidomail) from dbo.PedidosMailEstado
select @max=max(PedidosMailEstado.idpedidomail) from dbo.PedidosMailEstado
 
While (1 = 1)
Begin
	select @xfecha=PedidosMailEstado.fechacambio,@xdescrip=PedidosMailEstado.textomail,
			@xasunto=PedidosMailEstado.asunto,@xmail=PedidosMailEstado.maildestino,@xdescrip=PedidosMailEstado.textomail
			from dbo.PedidosMailEstado where PedidosMailEstado.idpedidomail=@min
	set @min=@min + 1
	set @cantidad = @cantidad + 1
 
	if @min>@max or @cantidad > 50 Break
		exec msdb.dbo.sp_send_dbmail @recipients = @xmail, @subject = @xasunto, @body = @xdescrip
End
if @cantidad>0
Begin
	delete PedidosMailEstado
End

A esto lo puse en un Store procedure y lo ejecuto desde un job

Que te parece?

Lo único que me falta es saber si se mando bien el mail o no...alguna idea?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Mandar mail desde SQL Server

Publicado por Isaias (4558 intervenciones) el 18/02/2016 17:01:09
Eliminar cursores, es la mejor forma utilizando "loop", en cuanto a que si se envio el correo o no, existe una variable al momento de enviar el correo que nos indica si fue enviado satisfactoriamente o no.

[ @append_query_error = ] append_query_error

Specifies whether to send the e-mail when an error returns from the query specified in the @query argument. append_query_error is bit, with a default of 0. When this parameter is 1, Database Mail sends the e-mail message and includes the query error message in the body of the e-mail message. When this parameter is 0, Database Mail does not send the e-mail message, and sp_send_dbmail ends with return code 1, indicating failure.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar