如何:將 SQL Mail 的預存程序轉換至 Database Mail (Transact-SQL)

Database Mail 可讓您從 SQL Server 傳送電子郵件。請使用預存程序 sp_send_dbmail 傳送電子郵件。此程序需要的引數類似 xp_sendmail 的引數。因此,把使用 xp_sendmail 的程序轉換成使用 sp_send_dbmail 更為直接了當。

sp_send_dbmail 另一個重要的參數是用來傳送訊息的選擇性郵件設定檔。您可以使用「Database Mail 組態精靈」或 Database Mail 預存程序來建立 Database Mail 設定檔。僅 msdb 資料庫可作為郵件主機資料庫。

若要將 SQL Mail 的預存程序轉換至 Database Mail

  1. 如果尚未啟用 Database Mail,請啟用。若要啟用 Database Mail,請使用「Database Mail 組態精靈」。

  2. 如果您尚未建立 Database Mail 設定檔,請建立。如需如何建立 Database Mail 設定檔的詳細資訊,請參閱<如何:建立 Database Mail 私人設定檔 (Transact-SQL)>。

  3. xp_sendmail 的呼叫取代成 sp_send_dbmail 的呼叫。將 xp_sendmail 的引數對應到 sp_send_dbmail,如下表所示。

xp_sendmail 引數

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

@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

@set_user

@dbuse

@execute_query_database

  1. 當您更新程序時,請考量下列差異:

    • 沒有可用的 MAPI 訊息類型。因為 Database Mail 不使用「擴充 MAPI」,所以預存程序無法設定訊息類型。

    • 如果有提供 @query 參數,來自查詢的錯誤將傳回至呼叫 sp_send_dbmail 的工作階段。

    • 如果有提供 @query 參數,查詢將以現行使用者的身分執行。但是,查詢可能包含有效的 Transact-SQL,包括 EXECUTE AS 陳述式在內。

    • Database Mail 支援下列選項,但在 SQL Mail 中不支援這些選項:

    sp_send_dbmail 引數

    描述

    @profile_name

    指定要用於訊息的郵件設定檔。Database Mail 支援多個設定檔並支援每一個設定檔有多個帳戶,以提高可靠性和延展性。如果郵件主機資料庫或呼叫 sp_send_dbmail 的使用者有預設設定檔,則可省略 @profile

    @body_format

    指定電子郵件訊息的格式:TEXT 或 HTML 其中之一。

    @importance

    指定電子郵件訊息的重要性。

    @sensitivity

    指定電子郵件訊息的敏感性。

    @query_attachment_filename

    指定將查詢結果附加為檔案時要使用的檔案名稱。如果使用 xp_sendmail @query parameter 搭配 @attach_results = TRUE,@attachments 參數只能指定一個檔案附加到電子郵件訊息。sp_send_dbmail 同時有 @file_attachments

    @query_attachment_filename

範例

下列範例使用 SQL Mail 傳送訊息到 danw@Adventure-Works.com

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

接下來的範例則使用 Database Mail 與目前使用者的預設設定檔,來傳送相同的訊息:

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

請注意,程序是在 msdb 資料庫中執行。