TransWikia.com

Problema Para enviar Email desde SQL SERVER

Stack Overflow en español Asked by Soldier on November 18, 2021

Intento enviar correos desde SQL Server pero me marca un error.

Configuro las opciones tiene sql con mis datos pero no me lo envía, intente con cuentas de gmail y si funcionan, si los manda, intente cambiar el puerto, la conexión con SSL y nada

introducir la descripción de la imagen aquí

Me marca el siguiente error:
introducir la descripción de la imagen aquí

One Answer

Yo mando los mails desde Transact-SQL.

NOTA: Te voy a poner todo lo que puedes hacer con una breve explicación, esto no quiere decir que necesites todos los elementos (lo que empieza con el @), no te agobies por la cantidad de código, leelo y usa lo que necesites.

  1. crear una cuenta:
    sysmail_add_account_sp   
         @account_name =  'prueba3', /*Nombre de cuenta*/
         @description = 'Esto es una cuenta de prueba', /*Descripcion de la cuenta*/
         @email_address =  '[email protected]' ,  /*Correo de Origen*/
         @display_name =  'name2' ,  /*El nombre que sale encima del Asunto*/
         @replyto_address =  '[email protected]' ,  /*La cuenta a la que el cliente manda las respuestas*/
         @mailserver_name =  'smtp.gmail.com', /*Dirección IP del servidor de correo SMTP*/
         @mailserver_type =  'SMTP' , /*Tipo de servidor de correo*/
         @port =  '587',  /*Numero de puerto para el servidor de correo electrónico*/
         @username =  'prueba3', /*Nombre de usuario*/
         @password =  'Admin1234', /*Contraseña de Usuario*/
         @enable_ssl =  TRUE /*Cifra el correo para que sea más seguro (BIT)*/

2.Crear un Perfil:

sysmail_add_profile_sp @profile_name = 'prueba3'

3.Juntar Cuenta con perfil:

sysmail_add_profileaccount_sp 
    /*@profile_id = '5'  /*se asocia el perfil a la cuenta mediante la id de prfil*/*/
    @profile_name = 'prueba3' ,  /*se asocia el perfil a la cuenta mediante el nombre de perfil*/
    /*@account_id = '5'  /*se asocia el perfil a la cuenta mediante la id de la cuenta*/*/
    @account_name = 'prueba3',  /*se asocia el perfil a la cuenta mediante el nombre de cuenta*/ 
    @principal_name = 'public', /*se pone en public para que pueda mandar correos               sin problemas*/
    @sequence_number = 1 /*Determina el número de cuentas que se utilizan en el perfil (INT)*/

4.Mandar el mensaje:

EXEC sp_send_dbmail 
    @profile_name='prueba2', /*El nombre de perfil del emisor*/
    @recipients='[email protected]', /*dirección/es de correo a los que se envían el mensaje,
    si se manda a más de uno, se separan mediante una coma*/
    /*@blind_copy_recipients = '[email protected]', /*No muestra el destinatario en el correo*/*/
    @reply_to = '[email protected]', /*El correo al que el destinatario va a enviar la respuesta
    NOTA: Si se deja null, la respuesta se envía a @reply_to_address especificado en la creación de
    cuenta*/
    @subject='mensaje de prueba 2', /*Asunto del mail*/
    @body='Con archivo esto es un mensaje de prueba 2',
    /*Mensaje*/
    @body_format = 'HTML', /*Define el formato del mensaje, tiene 2: TEXT y HTML
    En el modo TEXT, el mensaje se envía con una fuente, tamaño y color predeterminado
    En el modo HTML Decides todo mediante marcas HTML ejemplo:
    @body='esto es un mensaje de <br><span style="color:red;">prueba body_format html con color 2</span>',*/
    /*@importance = 'Low', /*Define la importancia del mensaje, por defecto en medio, en high pone una
    exclamación roja en el mensaje y con low pone una flecha azul*/*/
    @sensitivity = 'Personal', /*Define la sensibilidad del contenido, el defecto es normal, y se
    pueden poner los valores Personal, Privado y confidencial*/
    @file_attachments = 'C:xampphtdocsimglogosfavicon.jpg', /*Adjunta un archivo al mensaje
    NOTA: Hay que poner la ruta absoluta del archivo*/
    @query = 'select * from clientes', /*La sentencia que se va a mandar*/
    @execute_query_database = 'inmo_derio'  , /*La BD donde se ejecuta la sentencia*/
    @attach_query_result_as_file = 1, /*Define si la sentencia se va a mandar en una pestaña a parte
    o si se va a mandar junto al texto*/
    @query_attachment_filename='warning.csv', /*Define el formato del archivo, no vale cualquier
    formato, .csv es uno de los más comunes y si funciona, pero otros como .pdf no 
    NOTA: no incluir este si noestá incluida @query*/
    @query_result_header = 0, /*Especifica si la sentencia se manda con el nmombre de columna o solo
    con el contenido*/
    @query_result_width = 1500, /*Indica el ancho que va a ocupar la sentencia*/
    @query_result_separator = ',', /*Define el carácter que separa los datos resultantes de la sentencia*/
    @append_query_error = 0, /*Especifíca si se debe de mandar el correo cuando la sentencuia devuleve
    un error*/ 
    @query_no_truncate = 0, /*No se, solo se que es excluyente con @query_result_no_padding*/
    @query_result_no_padding = 1; /*Define si hay espacio entre los datos resultantes de la sentencia*/

NOTA 2: El usuario tiene que tener permiso de ejecución sobre el proceso sp_send_dbmail y tener el rol de DatabaseMailUserRole, ahora te digo como se hace:

Para dar permiso sobre el proceso:

Use msdb
Go
GRANT EXECUTE ON sp_send_dbmail  TO @user;

Para dar el Rol:

Haces doble click en el login del usuario, te vas a la pestaña de UserMapping, haces click en el recuadro de la BD msdb y le das el siguiente rol: DatabaseMailUserRole

foto--1 foto--2

NOTA 3: Al ser un proceso de SQL Server, lo puedes meter en un trigger y hacer que se mande un correo cada vez que se ejecute una insert en x tabla (por ejemplo)

Espero que te sirva de ayuda, un saludo

Answered by javiertxu18 on November 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP