Augusto Humire Martinez web blog

algo de web-in

Enviar correo desde Sql Server

Hace poco me tocó tener que informar acerca de unas fechas de vencimiento de ciertos eventos, y me pregunte como hacerlo facil y sin tener que inventarme mails senders, entonces se puede hacer con el procedimiento almacenado llamado sp_send_dbmail, y bueno la configuracion no complicada, solo saber que servidor de correos utilizar,

Configurar DataBase Mail

Abrir el management de sql server y configurar el database mail utilizando el asistente como se ve en la siguiente figura

dbm1el asistente nos guiara en el proceso de configuracion del database mail, como las imagenes hablan mas que las palabras, entonces vean las imagenes…

dbm2

dbm31

la siguiente ventana habilita la caracteristica para el envio de correo, por supuesto haga click en SI (Yes)

dbm41

Creamos un nombre de perfil, podemos tener varios perfiles en el databse mail, eso nos permitira tener varias cuentas de correo para los diferentes objetivos en nuestros scripts

dbm51

Presionando añadir(Add) crearemos la cuenta de mail en el database mail como se muestra en la imagen, atencion a este punto por que hasta aqui se necesita tener pleno conocimiento del servidor de correos que utlizaremos, necesitaremos tener datos como el nombre de smtp de nuestro servidor de correos que para todos los casos nuestros sera diferentes,

  • nombre de cuenta (account name): representa el nombre de cuenta para el database mail
    descripcion (description): representa la descripcion de la cuenta
  • Email address: es la direccion de correo
  • Nombre a mostrar (Display name): es el nombre que se mostrara cuando el correo arrive
  • Direccion de respuesta (Reply email): la direccion de correo a la cual se puede responder cuando el correo llegue a la bandeja del destinatario
  • Server Name (Nombre del servidor): direccion del servidor de smtp el cual se encargara de enviar el correo, nomalmente los smtp usan el puerto 25, asi que ese numero 25 dejarlo tal cual se ve en la imagen, pero si la authenticación que el servidor tienes usa SSL entonces en lugar del puerto 25 use el 465 y marque la casilla que dice “Este servidor requiere una conexion segura SSL”
  • Autenticacion basica (Basic authentication): sera su nombre de cuenta que dependiendo de su servidor de correo puede ser el nombre de cuenta solo (micorreo) o tal vez la direccion completa (micorreo@servidor.com) eso dependera de la autenticacion que administre su servidor de correos

dbm61

dbm72

dbm8

dbm9

dbm10

Enviar Correo usando DataBase Mail

Para enviar el correo usamos un procedimiento almacenado llamado sp_send_dbmail

ejemplo

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Perfil1',
    @recipients = 'miotrocorreo@servidor.com',
    @body = 'La prueba funciono satisfactoriamente',
    @subject = 'Correo desde Sql Server' ;

Donde:
  • @profile_name es el nombre del perfil creado
  • @recipients son las direcciones de correo a las que enviaremos, esta puede ser una o varias separadas por “;”
  • @body es el texto o cuerpo del mensaje
  • @subject es el asunto

Otro ejemplo

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Perfil1',
    @recipients = 'miotrocorreo@servidor.com',
    @query = 'SELECT COUNT(*) FROM AdventureWorks.Production.WorkOrder
                  WHERE DueDate > ''2004-04-30''
                  AND  DATEDIFF(dd, ''2004-04-30'', DueDate) < 2' ,
    @subject = 'Work Order Count',
    @attach_query_result_as_file = 1 ;

Otro ejemplo mas

SET @tableHTML =
    N'<H1>Work Order Report</H1>' +
    N'<table border="1">' +
    N'<tr><th>Work Order ID</th><th>Product ID</th>' +
    N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
    N'<th>Expected Revenue</th></tr>' +
    CAST ( ( SELECT td = wo.WorkOrderID,       '',
                    td = p.ProductID, '',
                    td = p.Name, '',
                    td = wo.OrderQty, '',
                    td = wo.DueDate, '',
                    td = (p.ListPrice - p.StandardCost) * wo.OrderQty
              FROM AdventureWorks.Production.WorkOrder as wo
              JOIN AdventureWorks.Production.Product AS p
              ON wo.ProductID = p.ProductID
              WHERE DueDate > '2004-04-30'
                AND DATEDIFF(dd, '2004-04-30', DueDate) < 2
              ORDER BY DueDate ASC,
                       (p.ListPrice - p.StandardCost) * wo.OrderQty DESC
              FOR XML PATH('tr'), TYPE
    ) AS NVARCHAR(MAX) ) +
    N'</table>' ;

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'Perfil1'
    @recipients='miotrocorreo@servidor.com',
    @body = @tableHTML,
    @body_format = 'HTML'
    @subject = 'Work Order List';

Bueno eso es todo, como veran eso de los correos usando sql server puede ayudar de manera siginificativa en tareas como envio de avisos, alertas, o reportes, la variedad en realidad podria ser infinita.

noviembre 30, 2008 Posted by | Base de Datos | 19 comentarios