Cómo convertir procedimientos almacenados de SQL Mail al Correo electrónico de base de datos (Transact-SQL)

El Correo electrónico de base de datos le permite enviar correo electrónico desde SQL Server. Utilice el procedimiento almacenado sp_send_dbmail para enviar correo electrónico. Los argumentos que este procedimiento requiere son similares a los argumentos para xp_sendmail. Por tanto, convertir un procedimiento que usa xp_sendmail para que utilice sp_send_dbmail es sencillo.

El parámetro adicional más importante de sp_send_dbmail es el perfil de correo opcional que se utiliza para enviar el mensaje. El perfil del Correo electrónico de base de datos se crea mediante el Asistente para configuración del Correo electrónico de base de datos o los procedimientos almacenados del Correo electrónico de base de datos. Sólo la base de datos msdb puede ser una base de datos host de correo.

Para convertir un procedimiento almacenado de SQL Mail al Correo electrónico de base de datos

  1. Habilite el Correo electrónico de base de datos, si todavía no está habilitado. Para habilitar el Correo electrónico de base de datos, utilice el Asistente para configuración del Correo electrónico de base de datos.

  2. Cree un perfil del Correo electrónico de base de datos si todavía no se ha creado ninguno. Para obtener más información acerca de cómo crear un perfil del Correo electrónico de base de datos, vea Cómo crear perfiles privados de Correo electrónico de base de datos (Transact-SQL).

  3. Reemplace la llamada a xp_sendmail por una llamada a sp_send_dbmail. Asigne los argumentos de xp_sendmail a sp_send_dbmail, como se muestra en la siguiente tabla.

Argumento xp_sendmail

Argumento sp_send_dbmail

@recipients

@recipients

@message

@body

@query

@query

@attachments

@file_attachments

@copy_recipients

@copy_recipients

@blind_copy_recipients

@blind_copy_recipients

@subject

@subject

@type

N/D

@attach_results

@attach_query_result_as_file

@no_output

@exclude_query_output

@no_header

@query_result_header

@width

@query_result_width

@separator

@query_result_separator

@echo_error

N/D

@set_user

N/D

@dbuse

@execute_query_database

  1. Cuando actualice el procedimiento, tenga en cuenta las siguientes diferencias:

    • No hay ningún tipo de mensaje MAPI disponible. Puesto que el Correo electrónico de base de datos no utiliza MAPI extendida, el procedimiento almacenado no puede establecer el tipo de mensaje.

    • Si se proporciona el parámetro @query, cualquier error de la consulta se devuelve a la sesión que llamó a sp_send_dbmail.

    • Si se proporciona el parámetro @query, la consulta se ejecuta como el usuario actual. Sin embargo, la consulta puede contener cualquier Transact-SQL válido, incluidas instrucciones EXECUTE AS.

    • El Correo electrónico de base de datos permite el uso de las siguientes opciones no admitidas en SQL Mail:

    Argumento sp_send_dbmail

    Descripción

    @profile_name

    Especifica el perfil de correo que va a utilizar para el mensaje. El Correo electrónico de base de datos permite el uso de varios perfiles y cuentas para cada perfil, lo que proporciona una mayor confiabilidad y escalabilidad. Puede omitirse @profile si hay un perfil predeterminado para la base de datos host de correo o para el usuario que llama a sp_send_dbmail.

    @body_format

    Especifica el formato del mensaje de correo electrónico, TEXTO o HTML.

    @importance

    Especifica la importancia del mensaje de correo electrónico.

    @sensitivity

    Especifica la privacidad del mensaje de correo electrónico.

    @query_attachment_filename

    Especifica el nombre del archivo que se utiliza cuando el resultado de una consulta se adjunta como archivo. Si utiliza el parámetro xp_sendmail @query con @attach_results= TRUE, el parámetro @attachments sólo puede especificar un archivo para adjuntarlo al mensaje de correo electrónico. sp_send_dbmail tiene @file_attachments y

    @query_attachment_filename.

Ejemplo

El ejemplo siguiente utiliza SQL Mail para enviar un mensaje a danw@Adventure-Works.com.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @message=N'The master database is full.' ;

El ejemplo que sigue utiliza Correo electrónico de base de datos y el perfil predeterminado para que el usuario actual envíe el mismo mensaje:

EXEC msdb.dbo.sp_send_dbmail
    @recipients=N'danw@Adventure-Works.com',
    @body=N'The master database is full.' ;

Observe que el procedimiento se ejecuta en la base de datos msdb.