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
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.
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
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP