SQL Serverは、データベースメールソリューションを介して電子メールを送信する機能を提供します。
メールを送信する実際の動作は、sp_send_dbmail
を使用して行われます。 ストアドプロシージャ。ただし、SQL Serverから電子メールの送信を開始する前に、データベースメールを有効にして構成する必要があります。
これは、SSMSGUIまたはT-SQLを使用して実行できます。
この記事では、T-SQLでそれを行う方法を示します。データベースメールがシステムで有効にされたことがないことを前提としているため、データベースメールを有効にするための手順を実行します。
SSMS GUIを使用する場合は、SQL Server(SSMS)でデータベースメールを設定する方法を参照してください。
ステップ1:データベースメールXPを有効にする
SQL Serverからメールを送信する前に最初に行う必要があるのは、データベースメール拡張ストアドプロシージャ(データベースメールXP)を有効にすることです。これらはmsdbにあります システムデータベース。
これには、「詳細オプションの表示」が有効になっている必要もあります。
これらはデフォルトで無効になっています。したがって、これまでシステムでデータベースメールを使用したことがない場合は、それらを有効にする必要があります。
詳細オプションとデータベースメールXPを有効にする方法は次のとおりです。
EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO
SQLServerを再起動する必要はありません。これで、DatabaseMailXPが使用できるようになります。
マイクロソフトでは、このような高度なオプションは、経験豊富なデータベース管理者または認定されたSQL Server技術者のみが変更することを実際に推奨していますが、この記事の目的上、メモリを更新する経験豊富なDB管理者であると想定します😉
いずれにせよ、sp_configure
を実行するために 構成オプションを変更するか、RECONFIGURE
を実行するには、両方のパラメーターを使用します ステートメントでは、ALTER SETTINGS
を付与する必要があります サーバーレベルの権限。 ALTER SETTINGS
権限はシステム管理者によって暗黙的に保持されます およびserveradmin 固定サーバーの役割。
ステップ2:メールアカウントとプロファイルを作成する
データベースメールは、ユーザーアカウントから直接送信されるのではなく、プロファイルを介して送信されます。
データベースメールを使用して電子メールを送信するには、データベースメールアカウント、データベースメールプロファイルを作成し、アカウントをプロファイルに追加してから、ユーザーにそのプロファイルへのアクセスを許可する必要があります。ユーザーはmsdb
にいる必要があります データベース。
これを行うためのT-SQLコードは、次のようになります。
-- Switch to the msdb database
USE msdb;
-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;
-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'DB Admin',
@description = 'Mail account for admin emails.',
@email_address = '[email protected]',
@replyto_address = '[email protected]',
@display_name = 'DB Automated Mailer',
@mailserver_name = 'smtp.example.com',
@port = 25;
-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'DB Admin Profile',
@description = 'Profile for admin emails.';
-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'DB Admin Profile',
@account_name = 'DB Admin',
@sequence_number = 1;
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'DB Admin Profile',
@principal_name = 'Marge',
@is_default = 1;
さまざまな詳細を独自のものに置き換える必要があります。これは、機能するメールサーバーを指定し、正しいポートを使用していることも前提としています。
サーバーにMargeというログインがすでにあることに注意してください。ここでは、 msdbでユーザーを作成しました そのログイン用のデータベース。次に、最後の部分で、作成したプロファイルへのアクセスをそのユーザーに許可しました。
この例では、1つのデータベースメールアカウントを作成し、それをプロファイルに追加しました。必要に応じて、プロファイルに複数のアカウントを追加できます。これは、メールを送信するときのフェイルオーバーとして役立ちます。最初のアカウントが失敗した場合、次のアカウントを試し、次のアカウントを試します。
上記のコード(独自の詳細を含む)を取得すると、メールを送信できるようになります。
ステップ3:メールを送信する
前述のように、実際のメール送信はsp_send_dbmail
を使用して行われます。 ストアドプロシージャ。
次に例を示します:
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'DB Admin Profile',
@recipients = '[email protected]',
@body = 'Your favorite SQL Server Agent job just failed',
@subject = 'SQL Server Agent Job: FAILED';
これは、受信者、件名、メール本文などの基本事項が記載されたシンプルなメールです。
プロファイルを指定しない場合、プロシージャは現在のユーザーのデフォルトのプライベートプロファイルを使用します。ユーザーのデフォルトのプライベートプロファイルがない場合は、 msdbのデフォルトのパブリックプロファイルが使用されます データベース。デフォルトの公開プロファイルがない場合は、エラーが発生します。
その他のオプション
sp_send_dbmail
プロシージャは、この例で使用したものよりもかなり多くの引数を受け入れます。
sp_send_dbmail
の公式構文は次のとおりです。 手順:
sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]
[ , [ @recipients = ] 'recipients [ ; ...n ]' ]
[ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]
[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]
[ , [ @from_address = ] 'from_address' ]
[ , [ @reply_to = ] 'reply_to' ]
[ , [ @subject = ] 'subject' ]
[ , [ @body = ] 'body' ]
[ , [ @body_format = ] 'body_format' ]
[ , [ @importance = ] 'importance' ]
[ , [ @sensitivity = ] 'sensitivity' ]
[ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]
[ , [ @query = ] 'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
[ , [ @query_attachment_filename = ] query_attachment_filename ]
[ , [ @query_result_header = ] query_result_header ]
[ , [ @query_result_width = ] query_result_width ]
[ , [ @query_result_separator = ] 'query_result_separator' ]
[ , [ @exclude_query_output = ] exclude_query_output ]
[ , [ @append_query_error = ] append_query_error ]
[ , [ @query_no_truncate = ] query_no_truncate ]
[ , [ @query_result_no_padding = ] @query_result_no_padding ]
[ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]
各引数の詳細な説明については、Microsoftのドキュメントを参照してください。
データベースメールリファレンス
データベースメールチュートリアルの包括的なリストについては、データベースメールチュートリアルを参照してください。各チュートリアルはデータベースメールの特定の部分を扱っているため、これは優れたリファレンスになる可能性があります。