データベース メール プロファイル

データベース メール プロファイルとは、関連のあるデータベース メール アカウントに順序を付けたコレクションです。メールを送信するには、msdb データベースの DatabaseMailUserRole のメンバであることに加えて、少なくとも 1 つのデータベース メール プロファイルへのアクセス許可が必要です。データベース管理者はプロファイルを使用することで、電子メールを使用するストアド プロシージャおよびデータベース アプリケーションをアプリケーション コードを変更することなく再構成できます。たとえば、アプリケーションの開発およびテスト段階では、ある電子メール アカウントのセットでプロファイルを構成しておき、アプリケーションを実稼動環境に移行するときにプロファイルを別のアカウントのセットに更新することができます。使用されるプロファイルの名前は同一ですが、電子メールの送信に使用される電子メール サーバーの一覧が変わります。

注意

データベース メールには MAPI (Messaging Application Programming Interface) が使用されないので、データベース メール プロファイルは MAPI メール プロファイルではありません。また、SQL Mail プロファイルも使用されません。

プロファイルを使用すると、電子メール サーバーへのメッセージ配信や電子メール サーバーでのメッセージ処理ができなくなった場合の信頼性が高まります。プロファイル内のアカウントには、通し番号が付けられます。プロファイル内でのアカウントの使用順序がこの通し番号によって決まります。新しい電子メール メッセージが作成されると、メッセージを正常に送信した最後のアカウントが使用されます。ただしその時点で正常に送信されたメッセージが 1 通もない場合は、最も番号が小さいアカウントが使用されます。そのアカウントで失敗した場合、次に番号が小さいアカウントが使用されます。メッセージが正常に送信されるか、最も番号が大きいアカウントで失敗するまでこの動作が続きます。最も番号が大きいアカウントで失敗した場合、sysmail_configure_spAccountRetryDelay パラメータで構成した時間、メールの送信が一時停止されます。その後、最も番号が小さいアカウントからメールの送信プロセスが再開されます。sysmail_configure_spAccountRetryAttempts パラメータは、指定されたプロファイルの各アカウントを使用して外部メール プロセスが電子メール メッセージを送信する回数を構成します。

複数のアカウントの通し番号が重複している場合、そのうちの 1 つのみが特定の電子メール メッセージを送信するために使用されます。このとき、その番号がどのアカウントで使用されるのかは不定で、どのメッセージにも同一のアカウントが使用されるかどうかも保証されません。

プロファイルはデータベース管理者が電子メールへのアクセスを制御する上でも役立ちます。データベース メールを送信するには DatabaseMailUserRole のメンバシップが必要です。プロファイルを使用すると、メールを送信するユーザーおよび使用するアカウントを管理者が柔軟にコントロールできます。データベース メールでは、プライベート プロファイルごとに、そのプロファイルを使用して電子メールを送信することを許可されたユーザーの一覧が管理されます。パブリック プロファイルは、DatabaseMailUserRole のメンバである、msdb データベースのユーザーまたはロールが使用できます。

既定では、プロファイルはプライベートで、どのユーザーもプロファイルへのアクセス許可が与えられていません。プロファイルをパブリックにするには、ユーザー 'public' またはユーザー ID 0 にアクセス許可を与えます。プロファイルのアクセス許可の詳細については、「sysmail_add_principalprofile_sp (Transact-SQL)」を参照してください。

任意のプロファイルを既定のプロファイルにすることができます。既定のプロファイルを使用することで、ユーザーはプロファイルを明示的に指定することなく電子メールを送信できます。電子メール メッセージを送信するユーザーが既定のプライベート プロファイルを所有している場合、そのプロファイルが使用されます。ユーザーが既定のプライベート プロファイルを所有していない場合、sp_send_dbmail によってデータベースの既定のパブリック プロファイルが使用されます。ユーザーの既定のプライベート プロファイルもデータベースの既定のパブリック プロファイルも存在しない場合、sp_send_dbmail がエラーを返します。いずれの場合も、データベース メールを送信するには、DatabaseMailUserRole のメンバである必要があります。