Qué es Database Mail
Database Mail es una característica disponible desde SQL Server 2005, que permite el envío asíncrono de correo electrónico desde el motor de base de datos (incluyendo ficheros adjuntos, resultados de consultas, envío de correo electrónico en formato HTML, Notificación a Operadores por Alertar o finalización de Jobs, etc.). Utiliza directamente el protocolo SMTP, y para poder ser utilizado, debe ser previamente habilitado (con sp_configure) y configurado en SQL Server (especialmente, los perfiles de correo). Database Mail viene a sustituir a SQL Mail, que actualmente se incluye por motivos de compatibilidad hacia atrás, y en futuras versiones desaparecerá. Además, Database Mail está soportado para funcionar en una instalación de SQL Server en Cluster. De hecho, en esta serie de artículos configuraremos y usaremos Database Mail es una instalación en Cluster de SQL Server 2008 R2 sobre un Failover Cluster de Windows Server 2008 R2.
Database Mail es un componente que se ejecuta fuera del proceso del propio motor de base de datos (es decir, del propio SQL Server), lo cual implica ciertas ventajas desde el punto de vista de la estabilidad del sistema, ya que una pérdida de servicio o una incidencia de Database Mail no afectará al motor de base de datos, al tratarse de procesos independientes. En particular, en SQL Server 2008 R2 se trata del ejecutable DatabaseMail.exe.
El funcionamiento de Database Mail se apoya en el Service Broker, es decir, para su correcto funcionamiento, Service Broker debe estar habilitado en la base de datos del sistema MSDB. De este modo, cada vez que se envía un correo electrónico con Database Mail, se realizará de forma asíncrona, pudiendo ser encolado si fuera necesario.
Con Database Mail podemos configurar múltiples perfiles de correo electrónico. Cada perfil de correo electrónico, puede ser Público o Privado. Los perfiles Públicos pueden ser utilizados por cualquier usuario, mientras que los perfiles privados están asociados a un usuario específico.
En la configuración de cada perfil de correo electrónico especificaremos una o varias cuentas de correo electrónico, ordenadas según la prioridad que deseemos dar a cada cuenta. Cuando hablamos de cuentas de correo electrónico, nos referimos a las correspondientes configuraciones de correo electrónico, principalmente el servidor SMTP, autenticación de acceso al SMTP (básica, integrada en Windows, o acceso anónimo), y la cuenta de correo electrónico. El hecho de configurar múltiples cuentas para un único perfil, nos permite que en caso de fallo en el envío de correo electrónico utilizando una cuenta, se pueda intentar el envío utilizando el resto de cuentas configuradas, siguiendo el orden de prioridad asignado a las cuentas.
Database Mail también nos permite realizar ciertas configuraciones globales de gran utilidad, en particular:
- Account Retry Attempts.
- Account Retry Delay (seconds).
- Maximum File Size (Bytes).
- Prohibited Attachment File Extensions.
- Database Mail Executable Minimum Lifetime (seconds).
- Logging Level.
Así, por defecto Database Mail limita el tamaño de los ficheros adjuntos a 1MB. Si necesitamos ampliar este límite, tan sólo tendremos que modificar la correspondiente configuración global (Maximum File Size).
Una vez configurado Database Mail, podremos utilizarlo para enviar correo electrónico desde TSQL (incluyendo emails en formato HTML). Sin embargo, también lo podremos utilizar con el Agente de SQL Server, para el envío de Notificaciones por correo electrónico a los Operadores, tanto en el caso de las Alertas, como en la finalización de Jobs, etc. Por ejemplo, nos puede resultar muy interesante que nos envíe un correo electrónico cuando un Job finaliza con errores.
Todos los correos electrónicos enviados por Database Mail quedan registrados en un tabla del sistema de MSDB a modo de histórico, por lo cual, en algunos casos puede resultarnos de interés consultar dicha tabla (o las vistas del sistema relacionadas).
Principales diferencias entre Database Mail y SQL Mail
Sin duda, un tema interesante: Database Mail vs SQL Mail. Como se puede ver a continuación, Database Mail gana por goleada. De hecho, es recomendable migrar SQL Mail a Database Mail, si es que aún utilizamos SQL Mail, pues además, SQL Mail será eliminado en futuras versiones de SQL Server. De hecho, desde SQL Server 2005, SQL Mail se mantiene tan sólo por motivos de compatibilidad hacia atrás. Breve comparación:
- Database Mail. Está basado en SMTP (Simple Mail Transfer Protocol), es decir, utiliza directamente el servidor SMTP configurado para el envío del correo electrónico, por lo que resulta más apropiado y seguro. Pueden configurarse los perfiles de correo electrónico deseados directamente desde SQL Server (de forma gráfica o con TSQL). Database Mail es un proceso independiente a SQL Server, que es utilizado mediante procedimientos almacenados del sistema y el Service Broker, recomendable para evitar problemas de estabilidad y de rendimiento. Database Mail SI está soportado en instalaciones de SQL Server en Cluster, lo cual, junto a la posibilidad de poder utilizar múltiples cuentas de correo (es decir, múltiples servidores SMTP), se presenta como una gran ventaja en el terreno de la Alta Disponibilidad.
- SQL Mail. Está basado en MAPI (Messaging Application Programming Interface), es decir, requiere de la instalación de un Cliente MAPI como Microsoft Outlook en la propia máquina SQL Server, menos rápido y seguro. De este modo, SQL Mail utilizará los componentes MAPI de una aplicación externa (ej: Microsoft Outlook) para enviar y recibir correos electrónicos. Deben configurarse los perfiles de correo electrónico en el servidor con el cliente MAPI utilizado (ej: Outlook), lo cual resulta algo tedioso. La utilización de SQL Mail se realiza utilizando procedimientos almacenados extendidos (ej: xp_sendmail), los cuales invocarán al cliente de correo utilizado. SQL Mail no está soportado en instalaciones de SQL Server en Cluster, ya que el interfaz MAPI utilizado por SQL Server no es Cluster-Aware.
Hasta aquí llega el presente artículo. Próximamente, aprovecharemos para hablar sobre cómo configurar Database Mail en SQL Server 2008 R2 y como utilizar Database Mail en SQL Server 2008 R2, para así finalizar esta serie de artículos sobre Database Mail.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.