sp_processmail (Transact-SQL)

拡張ストアド プロシージャ xp_findnextmsgxp_readmail、および xp_deletemail を使用して、Microsoft SQL Server の受信トレイの受信メール メッセージを処理します。各メッセージのメッセージ本文には、クエリが 1 つ含まれていることが前提となります。このプロシージャでは拡張ストアド プロシージャ xp_sendmail を使用して、結果セットを添付ファイルでメッセージの送信者に返送します。

重要な注意事項重要

このプロシージャはなるべく使用しないでください。sp_processmail プロシージャでは、不明な送信者からユーザー宛てにメール送信された情報も処理されるため、このプロシージャを利用して悪意のあるプログラムが環境に侵入する可能性があります。プログラムを実行する場合は、事前に十分な検証を行ってください。このプロシージャは前バージョンとの互換性のためにパッケージに含まれていますが、SQL Mail を有効にするまではインストールされません。

注意

この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_processmail [ [ @subject = ] 'subject' ] 
     [ , [ @filetype = ] 'filetype' ] 
     [ , [ @separator = ] 'separator' ] 
     [ , [ @set_user = ] 'user' ] 
     [ , [ @dbuse = ] 'dbname' ]

引数

  • [ @subject = ] 'subject'
    SQL Server で処理するクエリ メールとして扱うメール メッセージの件名の行を指定します。subject のデータ型は varchar(255) で、既定値は NULL です。このパラメーターを指定すると、sp_processmail ではこの件名を含むメッセージだけが処理されます。既定では、SQL Server ではメッセージ本文にクエリが含まれているものとして、すべてのメール メッセージが処理されます。

  • [ @filetype = ] 'filetype'
    メッセージの送信者に添付ファイルとしてクエリ結果セットを返すときに使用するファイル拡張子を指定します。filetype のデータ型は varchar(3) で、既定値は "txt" です。

  • [ @separator = ] 'separator'
    結果セットの各列の区切り文字 (フィールド ターミネータ) を指定します。この情報は xp_sendmail 拡張ストアド プロシージャに渡され、メッセージの送信者に結果セットを返すために使用されます。separator のデータ型は varchar(3) で、既定値は 'tab' です。これは、列間でタブ文字を使用する特殊なケースです。

  • [ @set_user = ] 'user'
    クエリを実行するセキュリティ コンテキストを指定します。user のデータ型は varchar(132) で、既定値は guest です。

  • [ @dbuse = ] 'dbname'
    クエリを実行するデータベース コンテキストを指定します。dbname のデータ型は varchar(132) で、既定値は master です。

リターン コードの値

0 (成功) または 1 (失敗)

結果セット

なし

説明

受信電子メールには、メッセージ テキストとして 1 つの有効な SQL Server クエリが含まれていることが前提となります。sp_processmail では未読メッセージだけが処理されます。クエリの結果はメッセージの送信者に返送され、受信したメッセージで CC: に指定されているユーザーにもコピーが送信されます。処理済みのメッセージは、受信トレイから削除されます。サーバー宛ての電子メールが頻繁に送信されると、sp_processmail をそのたびに実行する必要が生じます。定期的に電子メールを処理するために、SQL Server エージェントを使用して sp_processmail のジョブにスケジュールを設定できます。このスケジュール設定により、一定の頻度でメールが処理され、情報メッセージと処理されたクエリ数がジョブ履歴に記録されます。

結果は、添付ファイルとして送信されます。送信されるファイルの完全な名前は、Sql356.txt のように、"Sql" の後にランダムな数字の列が設定され、その後にファイルの種類を示す指定した拡張子が設定されます。

重要な注意事項重要

メール メッセージに適切なアイコンを添付するには、ファイルの種類が正しく関連付けられていることを確認してください。ファイルの関連付けを作成するには、デスクトップの [マイ コンピューター] をダブルクリックし、[ツール] メニューの [フォルダー オプション] をクリックします。[フォルダー オプション] ダイアログ ボックスの [ファイルの種類] タブで、ファイルを開くときに使用するアプリケーションを指定します。

さまざまなデータベースのクエリに応じて、異なる sp_processmail ジョブを設定できます。たとえば、AdventureWorks2008R2 データベースに対するクエリの件名は "SQL:AdventureWorks" であるという規則を採用している場合は、subject に SQL:AdventureWorks、dbname に AdventureWorks2008R2 を指定して sp_processmail を実行できます。また、別のデータベース クエリやグループ化でも、異なる形式を使用できます。たとえば、ディストリビューション タスクの場合は subject に SQL:distribution、dbname に distribution を指定できます。SQL Server エージェントを使って、これらのジョブをスケジュールに組み込むこともできます。

sp_processmail システム ストアド プロシージャは、さまざまな用途に合わせて変更することもできます。たとえば、sp_helptext システム ストアド プロシージャを使ってプロシージャのテキストを取得したり、Transact-SQL コードを変更したり、新しいプロシージャを作成してユーザー定義の動作を指定することもできます。次のような変更を行えます。

  • xp_findnextmsg 拡張ストアド プロシージャに @type パラメーターを指定して実行し、特定のカスタム メッセージ型だけを処理します。

  • 処理後、メッセージに read (既読) のマークを付け、メッセージを削除しないようにします。これには peek に false を設定してもう一度 xp_readmail を実行します。

  • attach_result に false を設定し、attachments パラメーターを削除した状態で、xp_sendmail を呼び出し、電子メール メッセージの本文にクエリの結果を含めて送信します。

  • クエリを実行するセキュリティ コンテキストを、メッセージの送信者のコンテキストに設定します。電子メールのユーザー名が SQL Server のユーザー名と同じ場合、これを実行するには set_user = @originator を使用して xp_sendmail を呼び出します。メールのユーザー名が有効な SQL Server ユーザー名ではない場合 (空白を含んでいる場合など) は、テーブルの参照や文字の置換を行って、xp_sendmail に渡す正しい SQL Server ユーザー名を取得します。

権限

このプロシージャを実行できるのは、sysadmin 固定サーバー ロールのメンバーだけです。

次の例では、受信トレイのすべてのメッセージを AdventureWorks2008R2 データベースのクエリとして処理します。結果セットは CSV (コンマ区切り値) 形式でクライアントに返されます。

EXEC sp_processmail
    @filetype = 'CSV'
    ,@separator = ','
    ,@dbuse = 'AdventureWorks2008R2';