Hola de nuevo a todos/as!!
Esta vez toca SQL Server 2008. Hace unos días un exprofesor mío y amigo mio Jose Cousiño ,que podriamos decir que ha sido mi mentor en .net y al cúal le debo mucho :) , me explico cómo enviar correos des de SQL Server. El caso es que muchas veces necesitamos mandar correos cuando se realiza una operación en nuestra base de datos, y el envío de correo lo realizamos desde la aplicación, pero debemos de saber que se puede hacer desde el mismo servidor de bases de datos.
Para enviar los correos desde el servidor debemos de hacer varias cosas:
1. Crear un Profile para mandar los correos (Un Profile es un perfil de base de datos)
2. Envío del correo con el procedimiento almacenado msdb.dbo.sp_send_dbmail
Para crear el Profile hay dos formas, por diseño o por código. Nosotros únicamente vermos cómo se hace por diseño si a alguién le interesa por código que lo pida y lo envío.. A ello! los pasos a seguir serán los siguientes:
1. En Sql Server Managment Studio, vamos al nodo Administración / Correo electrónico de base de datos

2. Botón derecho envima del nodo "Correo electrónico de base de datos", y seleccionamos "Configurar Correo Electrónico de base de datos". Aparece un asistente que vamos a explicar detalladamente. En el primer forumlario pulsamos siguiente,

3. En el siguiente formulario, tenemos las siguientes opciones
a. Instalar Correo electrónico de base de datos
b. Administrar cuentas y perfiles de Correo electrónico
c. Administrar seguridad de Perfil
d. Ver o cambiar parámetros del sistema
Seleccionamos la primera opción para crear el Profile.
4. En el siguiente formulario vamos a crear ya el Profile y luego le añadiremos la cuenta de correo

Rellenamos el nombre de Perfil y pulsamos el botón agregar, en el cual vamos a configurar una cuenta de correo. Esta cuenta de correo puede ser cualquiera, pero generalmente cuando lo utilicemos en una empresa, utilizaremos una cuenta del servidor Exchange corporativo. Para indicar la cuenta de correo, tendremos que rellenar el siguiente formulario

- Nombre de cuenta: Nombre de la cuenta de correo
- Descripción: Breve descripción del nombre de cuenta.
- Servidor smtp saliente
- Dirección de correo electrónico: dirección de la cuenta de correo que enviará los correos, ejemplo sql@servidor.com
- Nombre para mostrar: ponemos el nombre que se quiere mostrar, por ejemplo “Correo Sql”
- Nombre del servidor: Indicamos el servidor smtp que utilizaremos para enviar al correo.
- Autenticación: Muchas veces nuestro servidor smtp necesita autenticación para poder enviar los correos. Las posibilidades son
- Autenticación de Windows.
- Autenticación básica: Tenemos que indicar usuario y password
- Autenticación anónima: La cuenta de correo no necesita auteticación
Una vez configurado todos los valores necesarios, aceptamos y pulsamos siguiente para que se cree el Profile. Bien, ya tenemos configurado todo para que nos funcione, ahora veremos cómo se envía el correo y ya estará listo para usar. Para enviar el correo debemos ejecutar el procedimiento alamacenado de la base de datos msdb “sp_send_dbmail”. Este procedimiento almacenado tiene algunos parámetros importantes:
- @profile_name: nombre del Profile con el que se va a enviar el correo.
- @recipients: lista de direcciones de correo electrónico, separadas por punto y coma, a las que se va enviar el correo.
- @copy_recipients: lista de direcciones de correo electrónico, separadas por punto y coma a las que se va a mandar el correo en “con copia”.
- @subject: asunto del correo.
- @body: cuerpo del correo.
- @body_format: Indica el formato del correo. Solamente puede tener alguno de estos dos valores: TEXT O HTML.
- @importance: indica la importancia del correo. Solamente puede contener alguno de estos valores: low, normal o high.
- @sesitivity: indica la confidencialidad del correo. Solamente puede contener alguno de estos valores: normal, personal, prívate o confidential.
- @file_attachments: Lista de nombre, separados por punto y coma de los archivos que se adjuntan al correo. Se debe de indicar las rutas absolutas.
- @query: consulta que se ejecuta para rellenar el correo.
- @mailitem_id: identificador del correo que se ha enviado.
Veamos un ejemplo que envía un correo en formato html.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'NombreProfile',
@recipients = 'contoso@contoso.com',
@body = '<p style="color:blue">Esto es una prueba de html</p>',
@body_format = 'HTML',
@subject = 'Correo de prueba desde Sql Server'
Para poder ejecutar el procedimiento almacenado, el usuario debe tener permisos en la base de datos msdb para execute. Si el usuario con el que estamos ejecutando el procedimiento almacenado no tiene permisos sobre el procedimiento almacenado sp_send_dbmail dará un error. Para solucionarlo tenemos que ir a la base de datos msdb, a su nodo seguridad, y damos botón derecho encima del usuario y seleccionamos propiedades. En la pantalla que aparece seleccionamos la función DatabaseMailUserRole, y con eso ya podemos ejecutar el procedimiento almacenado.
¡Espero que os guste y podaís utilizarlo en vuestros code's! :)