Configurar Database Mail cuando no usamos el puerto por defecto ni SQL Browser

Hace un tiempo me encontré un entorno en el cual la base de datos no estaba en el puerto por defecto por política de seguridad y el Browser de SQL no estaba activo por el mismo motivo.

En este escenario la configuración de Database Mail va a realizarse sin problemas pero a la hora de arrancar  va a fallar ya que no pide número de puerto, simplemente se auto configura para usar el nombre de la instancia. Por tanto si ponemos una instancia por defecto va a intentar conectar al puerto 1433 y si es una instancia con nombra va a intentar contactar contra el Browser.

image

Como se puede ver no puedo configurar más que unas pocas opciones.

Ahora bien después de usar el wizard para crear la instancia el servidor no funciona ya que Database Mail no puede contactar con la base de datos.

La solución para este problema viene de la mano del siguiente articulo https://msdn.microsoft.com/en-us/library/bb326746.aspx. El articulo describe como configurar Database Mail para usar un servidor remoto, en nuestro caso queremos usar el local pero Database Mail no lo encuentra, aplicando los pasos del articulo podremos conectar Database Mail a nuestra instancia.

1 – Asegurarnos de que tenemos Database Mail configurado en el servidor

2 – Navegamos al directorio donde está el ejecutable de Database Mail, normalmente en el directorio Binn dentro del directorio de instalación de la instancia:

En SQL 2005 C:\Program Files\Microsoft SQL Server\MSSQL90.X\MSSQL\Binn

En SQL 2008 C:\Program Files\Microsoft SQL Server\MSSQL10.X\MSSQL\Binn

En SQL 2008 R2 C:\Program Files\Microsoft SQL Server\MSSQL10.50.X\MSSQL\Binn

3 – Creamos el siguiente archivo de configuración en el directorio:

DatabaseMail90.exe.config para SQL 2005

DatabaseMail.exe.config para SQL 2008  y 2008 R2

4 – Escribimos lo siguiente en el archivo

<configuration>
  <appSettings>
    <add key="DatabaseServerName" value ="LocalServerName" />
    <add key="DatabaseName" value ="msdb" />
  </appSettings>
</configuration>

Sustituimos LocalServerName por tcp:hostname,port  por ejemplo si nuestro servidor se llama Kaworu y esta escuchando en el puerto 34657 la configuración quedaria así:

<configuration>
<appSettings>
<add key="DatabaseServerName" value ="tcp:kaworu,34657 " />
<add key="DatabaseName" value ="msdb" />
</appSettings>
</configuration>

5 – A continuación deberemos ejecutar el siguiente comando en Management Studio para que Database Mail use el archivo de configuración

USE msdb;
GO
INSERT INTO [msdb].[dbo].[sysmail_configuration] ( [paramname] ,[paramvalue] ,[description] )
VALUES ( N'ReadFromConfigurationFile' ,N'1' ,N'Send mail from mail server in configuration file' ); GO

6 – Reiniciamos Database Mail ejecutando en Management Studio:

USE msdb;
GO
EXEC dbo.sysmail_start_sp;
GO

De esta forma tendremos Database Mail funcionando correctamente en un entorno donde no usamos el puerto por defecto ni el Browser de SQL.

Pablo Gavela López – Microsoft Customer Support Services