[SQL Mail TSQL] Envió de correos desde SQL 2005 parte 2.


Saludos nuevamente amigos, si leyeron el post anterior y todo les funciono correctamente, les será sumamente sencillo realizar el siguiente script TSQL, lo que haremos es enviar correos electrónicos con código TSQL desde un perfil ya configurado en el post anterior, a continuación les coloco el código:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'sqlPsyPerfil',--Perfil de correo configurado.
    @recipients = 'ivan.rangel.c@gmail.com', -- A quien se va enviar el correo.
    @body = 'Este correo es enviado desde SQL Server 2005 con código TSQL por sqlPsyKrest Blog',--Cuerpo del correo.
    @subject = 'Correo desde TSQL - MS SQL 2005 sqlPsyKrest.',--Asunto del correo.
    @importance = 'High' --[Low | Normal| High] Prioridad del correo.

 

En el script anterior se hizo uso del procedimiento almacenado de Sistema sp_send_dbmail, su función es la de enviar mensajes de correo electrónico desde la base de datos, para ejecutarlo este necesita una serie de parámetros, los cuales no todos son necesarios, los que en este caso se utilizan son:

@profile_name: Perfil de correo de donde se enviara el correo.

@recipients: Destinatarios del correo uno o más.

@body: Cuerpo del correo, por default es de tipo texto.

@subject: Asunto del correo.

@importance = Prioridad del envío del correo.

Dependiendo de la carga que tenga su servidor y de la prioridad configurada en el envió del correo, el correo llegara o se tardara mas tiempo en ser enviado, si no existieron problemas, el correo llegara correctamente a su destino.

image

Ahora enviaremos un correo electrónico con TSQL a partir de una consulta a una Tabla formateada en Tabla HTML.

DECLARE @tableHTML  NVARCHAR(MAX);

SET @tableHTML = 
N'<table border="1" cellpadding="5" cellspacing="0">'+
N'<thead>'+
N'<tr style=''background: Navy;    color: White;font-weight: bold;''>'+
N'<th>Id</th>'+
N'<th>Nombre</th>'+
N'<th>Apellidos</th>'+
N'<th>Email</th>'+
N'<th>Pass</th>'+
N'</tr>'+
N'</thead>'+
N'<tbody>'+
CAST ( ( SELECT td = id, '',
                td = nombre, '',
                td = apellidos, '',
                td = email, '',
                td = pass, ''                
              FROM dbo.USUARIO_SYS
              ORDER BY nombre, apellidos                       
              FOR XML PATH('tr'), TYPE 
    ) AS NVARCHAR(MAX) ) + 
N'</tbody>'+
N'</table>'


EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'sqlPsyPerfil',
    @recipients = 'ivan.rangel.c@gmail.com',    
    @subject = 'Correo desde TSQL 2005 con HTML',
    @body = @tableHTML,
    @body_format = 'HTML',
    @importance = 'High'

Como primer paso declaramos un variable @tablaHTML la cual contendra el cuerpo del mensaje en formato de tabla HTML con ayuda de la clausula FOR XML vista ya en posts anteriores, lo que hace la consulta es tranformar los datos de consulta en texto con características de lenguaje de marcado HTML.

Por ultimo solo nos queda asignar la variable @tablaHTML como nuestro contenido del mensaje, he indicar que el formato del mensaje será HTML con @body_format = ‘HTML’, los demas parametros ya sabemos como configurarlos, y de nuevo solo nos queda esperar a que llegue el correo a su destino como lo muestra la siguiente imagen.

image

Espero les sea de ayuda. Dejen Comentarios!!!

  1. que onda Ivan vi la dirección de tu blog en el msn, esta interesante lastima que ahora no manejé nada de sql, pero seguramente algun dia se me ofrecera y acudire a tu blog, espero aun te acuerdes de mi miguel angel trabaje de asesor en etc, deberias de poner algo tambien de visual basic.net bueno siguele hechando ganas y suerte!!

    • psykrest
    • 30/01/09

    Gracias por el comentario amigo mike, apenas empiezo con esto del blog, espero mejorarlo y subir post sobre VS 2005-2008. estamos en contacto🙂.

    • grivera
    • 2/03/09

    Oie man, muy uena info, me intereso bastante la creacion de la tabla html, no se me habia ocurrido, sigue asi man, buen dia.

    • psykrest
    • 2/03/09

    Gracias por dejar comentarios, ojala te sirva la info, seguiré tratando de postear scripts y ejemplos útiles, Buen día!!!

    • Joan
    • 26/03/09

    Saludos, hice todos los pasos correctamente y funciona muy bien, solo tengo un pequeño detalle…

    en tu imagen donde se muestra como llego la consulta al correo, a mi me sale los datos fuera de la tabla que se crea en html, si sale la tabla pero abajo de todos los datos de la consulta, cual sera mi error???

    Saludos
    y gracias por el post me ha sido de gran ayuda 😀

    • psykrest
    • 26/03/09

    Hola Joan, 1. Verifica que el correo que estas enviando esta habilitado para HTML, ya vez que puedes enviar mails de texto y html, 2. Que el resultado de la consulta la estas enviando por el body, es muy extraño tu error ya que los resultados van asociados al XML que se genera en la consulta, es decir no te puede arrojar la tabla y los datos por separado, 3. ya por último, que el correo en donde lo visializas tenga habilitada la opción de mostrar mails con html. Si sigues teniendo problemas enviame tu consulta y la revisamos. Saludos.

  2. Hola amigo ante todo felictaciones por tu blog , queria hacerte una consulta, yo configure sin smtp y funciono muy bien, pero eh cambido de hosting, y ahora trabajo con gmail, y entre las cosas que tiene conexion segura(SSL) y utiliza un determinado puerto, configura todo y sale correcto el problema es cuando envio el correo de prueba no llega al destino. Cual crees que seria el problema?.
    desde ya agradesco tu respuesta

    • psykrest
    • 7/05/09

    Hola Sandro, mira para que los correos salgan de una manera efectiva, las cuenta que dispara el mail debe estar AUTENTICADA, esa es una posible razón por la cual no llega y es un caso que en lo personal me ocurrió, al estar enviando mails, pasan dos cosas: 1) llegan a la bandeja de correos no deseados o SPAM,. 2) O puede que no lleguen. Otra opción a revisar es la cuenta del servidor de salida, ya que esta es la que enviara los correos, a simple vista es el diagnostico que puedo ofrecerte. Nota: Puedes revisar la cola de salida o estado de los email, dando clic derecho en: Administración >> Correo electrónico de base de datos, En la opción del menú contextual haz clic en la opción Ver registro de Correo electrónico de base de datos. Ahí te mostrara un informe de lo que sucede con los mails que envías desde SQL Server. Saludos espero te sea de ayuda.

  3. Hola amigo este es el mensaje que sale dentro del registro
    Failure Message=”No se pudo enviar el mensaje de correo a los destinatarios a causa de un error del servidor de correo. (Enviando mensaje de correo electrónico utilizando la cuenta 4 (2009-05-07T16:32:30). Mensaje de excepción: No se pueden enviar los mensajes de correo al servidor de correo. (El servidor SMTP requiere una conexión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.7.0 Must issue a STARTTLS command first. 34sm458435yxm.21).&#xD;&#xA;)”
    otra cosa use la vista de correos pendientes ahi figuran en status no enviado como crees que puedo resolver este tema ya me tiene loco.
    gracias de antemano por tu respuesta

    • psykrest
    • 8/05/09

    Hola de nuevo Sandro, para rápido, verifica que tienes configurado la cuenta y el perfil de correo similar a la manera en que se realiza en OUTLOOK, si ya estás seguro de que es así, el problema puede estar en la configuración del servidor de correos, lo que te decía tienes que configurar un SERVIDOR DE CORREO ENTRANTE (el que recibe), SERVIDOR DE CORREO SALIENTE (el que envía, de preferencia este debe de estar autenticado para enviar correos a cualquier tipo de cuentas de correo), creo que el problema puede estar por ahí, saludos.

  4. bueno amigo gracias por el tiempo que te tomas en constestar mis mensajes, el tema es que me perdi en tus ultimas indicaciones, el correo esta configurado tipo el outlock, la salida s smtp esta configurado con un numero de puerto y con el check mi servidor requiere autentificacion, pero como te dije anteriormente no sale del correo, disculpa de nuevo por quitarte tu tiempo valioso desde ya gracias por eso

    • Francisco Camacho (Venezuela)
    • 13/05/09

    Estimado amigo, su comentario me ha sido de gran ayuda, he logrado terminar una tarea encomendada, gracias por compartir sus conocimientos con las personas que lo necesitamos

  5. me sirvio de mucho los pasos claros y el tema interesante
    gracias

    • Laura
    • 25/08/09

    Hola a todos. Vuelvo a agradecer a este sitio y sus contribuidores, porque nuevamente el documento es muy bueno, muy explícito, y me funcionó perfectamente. Mil gracias.

    • FREDDY
    • 3/09/09

    que mas hombre, en verdad muchas gracias me ayudo mucho

    • Christian
    • 16/09/09

    Muchas gracias , estuvo muy interesante y me ayudo a implementarlo
    perfectamente , hice lagunas modificaciones en el tema del html y las css pero con el código que esta publicado se me hizo mas fácil.

    Saludos

    • Jorge
    • 28/01/10

    gracias, necesitaba mucho un ejemplo como este.

    • juan guillermo
    • 11/02/10

    gracias por el ejemplo. yo justo estaba buscando hacer envios de correos programados en formato html a varias lista de contactos a través de Sql server 2005.

    Muchas gracias, creo que esto me servirá

    saludos cordiales.

    • Edison(Peru)
    • 5/08/10

    Gracias psykrest, esta muy buena la info, me salio en una, de veras que esta muy bueno el blog, una consulta como puedo hacer que se ejecute automaticamente el sp, tengo que configurar algo asi como sacar backup automaticamente?.

    Gracias

    • Richard
    • 17/11/10

    Felicitaciones y gracias por su valioso aporte y transmitir los conocimientos, los cuales pertenecen a la humanidad.

    Si todos practicaramos esto, las nuevas generaciones serán las mas beneficiadas.

    Salu2!

    • Octavio
    • 7/12/10

    Buenos días

    Me sirvió muchisimo tu blog, solo tengo el siguiente problema, estoy haciendo pruebas la situación es que la tabla que llega al destinatario no llega ordenada, los encabezados llegan bien, pero los detalles llegan todos en el primer renglon y primera columna, osea que no se destribuyen en los de mas campos y renglones, todo aparece en un solo campo.

    a que crees que se deba, pensé en porner FOR XML AUTO TYPE, pero no se acabomoda en las filas.

    Saludos

    • Gina
    • 24/02/11

    Tengo el mismo poblema de Octavio, ¿pudieron solucionarlo? ¿como? me salen los resultados en la ultima columna de la tabla, y las demas columnas vacias!!!

    Saludos

    • Gustavo
    • 7/04/11

    Hola, si bien este sitio web hace mucho que no se actualiza. Espero lograr tener una respuesta…

    1) Si la consulta arroja vacío, sale un mail pero ni siquiera con los rotulos… hay alguna manera de solucionar esto?

    2) Si quisiera colocar una segunda consulta dentro del mismo cuerpo HTML, como debería hacer la misma? Ya que si en la primer consulta no arrojaba datos es como que cancela lo siguiente y me envía el mail vacío.

    Agradezco a los que puedan llegar a leer y responder este comentario.

    • william Ruiz
    • 5/05/11

    Hola, segui tu ejemplo y funciono a la perfeccion. Me gustaria saber como hago para que los correos no lleguen a la carpeta de correos no deseados de los destinatarios

  6. De lujooo! funcionó a la perfeccion!! graciaaaas!!

    ahora voy a agregar un SP para generar automáticamente el envio, ya les platicaré que tal estuvo…

    Salu2!

    • psykrest
    • 12/10/11

    Si el valor de la columna es NULL puedes usar los siguiente para reemplazar siempre que el valor sea nulo, es lo unico que se me ocurre en este momento:
    ISNULL(tuCampo,’No se encontraron resultados’)

    Saludos y una disculpa por no actualizar el blog, pero el trabajo es muy absorbente

    • manuel flores
    • 19/10/11

    Hola, primero felicitarte, haces una gran contribución. te cuénteme trabajo con sql server y tú ejemplo viene a la perfección. mi duda es sí se pueden colocar más de 1 tabla o una consulta más tabla o texto mezclado con tablas. saludos y gracias de ante mano por responder

    • psykrest
    • 28/10/11

    Hola manuel, sí puedes realizar las consultas con más de una tabla que desees segun sea tu caso, claro que el nivel de complejidad aumentara, Saludos desde México

    • Ximena
    • 12/04/12

    Hola, se que ya tiene tiempo de este post pero a ver si me pueden ayudar, lo que quiero es que en una celda del correo que mando desde sql aparezca el dato pero como un link, se puede? como lo hago?

    • Edelberto
    • 16/01/13

    Excelente informacion, andaba vuelto loco para mandar un reporte html, me ha servido muchisimo

    • Edelberto
    • 17/01/13

    Ximena, con lo explicado arriba, creo que es suficiente, ya que el formato html, automáticamente reconoce los link, por ejemplo http://www.google.com, o una direccion de ruta local con el formato ” \\nombredeSevidor\nombredecarpeta\nombredearchivoconextension
    automáticamente al recibir el correo debe verse y funcionar como links.
    Ya lo he probado y funciona bien

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: