現在オフラインです。再接続するためにインターネットの接続を待っています

[HOWTO] SQL Server で SQL Mail を使用せずに電子メールを送信する方法

この資料の内容

概要
SQL Mail では、Microsoft SQL Server から電子メールの送信および読み取りを行う簡単な方法が提供されています。ただし、SQL Mail は MAPI アプリケーションであるため、MAPI サブシステムがサーバー上に存在する必要があります。Microsoft Windows NT 4.0 では、Windows Messaging をインストールすると MAPI サブシステムがインストールされますが、Microsoft Windows 2000 には MAPI サブシステムが用意されていません。このため、SQL Mail を使用する場合、Microsoft Outlook などの MAPI クライアントをインストールする必要があります。

他の方法を使用して、SQL Server から直接 SMTP (Simple Mail Transfer Protocol) 電子メールを送信することができます。たとえば、CDONTS (Collaboration Data Objects for NT Server) または CDOSYS (Collaboration Data Objects for Windows 2000) を sp_OA という SQL Server OLE オートメーション ストアド プロシージャと組み合わせて使用できます。この資料では、これらの技法を使用してインターネット メール サーバーに電子メールを送信する方法のサンプルを示します。この資料に記載されている方法に修正を加えて、より堅牢なメール システムを構築することができます。たとえば、エラー処理コードの追加などが考えられます。この資料にサンプルとして記載されている方法では、電子メールの読み取りおよび電子メールの処理は実行されません。

: これらのプログラミングの例では、Transact-SQL で CDO オブジェクト モデルを呼び出すための方法を説明します。実際の運用環境でコードを実行するために必要な、プログラミング上の拡張やストレス テストなどは、自己の責任において行ってください。

マイクロソフトは、この情報をプログラミング言語の使用方法の一例として提供するだけであり、市場性および特定目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。プログラミングに習熟されていない場合、マイクロソフト認定パートナー、あるいはマイクロソフトの有償サポート窓口までお問い合わせください。マイクロソフト認定パートナー、有償サポート窓口については、次のマイクロソフト Web サイトを参照してください。使用可能なサポート オプションおよびマイクロソフトの問い合わせ先の詳細については、次のマイクロソフト Web サイトを参照してください。

CDO for Microsoft Windows NT Server (CDONTS) の使用方法

CDONTS は、SMTP (Simple Mail Transfer Protocol) に対応した OLE サーバーで、Web ベースのアプリケーションにメッセージング機能を提供することを目的として設計されています。そのため、CDONTS では HTML ベースの電子メールの送信がサポートされています。ただし、SQL Mail などの MAPI ベースのアプリケーションでは HTML ベースの電子メールは送信できません。Microsoft Internet Information Server (IIS) 4.0 以降では、デフォルトで CDONTS がインストールされます。Microsoft Windows 2000 では、デフォルトで Microsoft インターネット インフォメーション サービス (IIS) 5.0 がインストールされます。

CDONTS の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックして、文書番号 177850 を参照してください。
177850 INFO: What is the Difference Between CDO 1.2 and CDONTS?
177850 [INFO] CDO 1.2 と CDONTS の相違


CDONTS では、SMTP を使用してローカル サーバーに電子メールが送信されます。ローカル サーバー上に SMTP サーバーが存在しない場合、IIS によってインストールされる SMTP 仮想サーバーを使用して、適切な SMTP メール サーバーに SMTP 電子メールをルーティングできます。CDONTS を使用して SQL Server から電子メールを送信するには、以下の手順を実行します。

  1. SQL Server を実行しているコンピュータに、IIS をインストールし、実行します。
  2. SMTP サイトのプロパティを開き、"スマート ホスト" として SMTP メール サーバーを指定して、IIS SMTP サービスによってローカル サーバーに送信されるすべての SMTP 電子メールが、配信用の SMTP メール サーバーに自動的にルーティングされるようにします。
  3. SQL Server で、電子メールの送信に使用するストアド プロシージャを作成します。
SQL Mail ではなく CDONTS を使用する場合は、SQL Server を実行しているコンピュータに Microsoft Outlook などのメール クライアントをインストールしておく必要はありません。また、Microsoft Exchange サーバーもインストールする必要はありません。SMTP 電子メールをサポートしている任意のメール サーバーを "スマート ホスト" として使用できます。ただし、CDONTS を使用して、SQL Server を実行しているコンピュータに送信された電子メールの読み取りおよび処理を行うことはできません。また、SQL Agent Mail の機能を置き換えることもできません。

以下は、Microsoft Windows 2000 用の手順です。IIS 4.0 がコンピュータにインストールされている場合は、同様の方法で Microsoft Windows NT 4.0 を構成できます。ただし、手順は若干異なります。

Microsoft Windows NT 4.0 で "スマート ホスト" を構成する方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
230235 XCON: How to Configure the IIS SMTP Service to Relay SMTP Mail
230235 [XCON] SMTP メールを中継するように IIS SMTP サービスを構成する方法

スマート ホストを構成する

  1. [スタート] ボタンをクリックし、[プログラム]、[管理ツール] の順にポイントします。
    [インターネット サービス マネージャ] をクリックして、IIS マネージャを開きます。
  2. 目的のサーバーのツリーを展開します。[既定の SMTP 仮想サーバー] を右クリックし、[プロパティ] をクリックします。
  3. [配信] タブをクリックし、[詳細] をクリックします。
  4. [スマート ホスト] ボックスに、使用する SMTP メール サーバーの名前を入力します。SMTP メール サーバーの名前がわからない場合は、メール管理者に問い合わせてください。
  5. Simple Mail Transfer Protocol (SMTP) サービスが実行されていることを確認します。SMTP サービスは、IIS Admin Service の一部です。このため、IIS Admin Service も実行されている必要があります。

ストアド プロシージャを作成して CDONTS 電子メールを送信する

: この資料に記載されている企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、およびイベントの例は架空のものです。実在の企業、組織、製品、ドメイン名、電子メール アドレス、ロゴ、人物、場所、またはイベントとの関連を示唆するものではありません。

以下のようなコードを使用して、master データベースにストアド プロシージャを作成することにより、SQL Server OLE オートメーション ストアド プロシージャを使用して CDONTS オブジェクト モデルを呼び出して、電子メールを送信できます。

CREATE PROCEDURE [dbo].[sp_send_cdontsmail] @From varchar(100),@To varchar(100),@Subject varchar(100),@Body varchar(4000),@CC varchar(100) = null,@BCC varchar(100) = nullASDeclare @MailID intDeclare @hr intEXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUTEXEC @hr = sp_OASetProperty @MailID, 'From',@FromEXEC @hr = sp_OASetProperty @MailID, 'Body', @BodyEXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCCEXEC @hr = sp_OASetProperty @MailID, 'CC', @CCEXEC @hr = sp_OASetProperty @MailID, 'Subject', @SubjectEXEC @hr = sp_OASetProperty @MailID, 'To', @ToEXEC @hr = sp_OAMethod @MailID, 'Send', NULLEXEC @hr = sp_OADestroy @MailID

次に、作成したストアド プロシージャを使用して、適切なパラメータを指定します。
exec sp_send_cdontsmail 'someone@example.com','someone2@example.com','Test of CDONTS','It works'
: OLE オートメーション ストアド プロシージャを実行できるのは、sysadmin 固定サーバー ロールのメンバのみです。SQL Server ユーザーが sysadmin 固定サーバー ロールのメンバでない場合、サンプルとして記載されているストアド プロシージャを使用して電子メールを送信することはできません。このような場合、CDONTS で電子メールを送信するには、クライアント アプリケーションの開発が必要な場合があります。開発には、Microsoft Visual Basic アプリケーションなどを使用できます。

CDONTS によって、ローカルの SMTP 仮想サーバーに電子メールが送信されます。その後、仮想サーバーによって、[スマート ホスト] ボックスに指定されている SMTP メール サーバーに電子メールがルーティングされます。SMTP メール サーバーから To: 引数に指定されている電子メール アドレス (この例では、"someone2@example.com") にメールが送信されます。From: 引数に指定されている名前 (この例では、"someone@example.com") が、電子メールの送信者として表示され、"Test of CDONTS" という件名、および "It works" という電子メールの本文も一緒に表示されます。CC フィールドおよび BCC フィールドには引数が指定されていないため、電子メールの CC フィールドおよび BCC フィールドには何もコピーされません。

サンプルを変更して、HTML ベースの電子メールまたは添付ファイルを送信することができます。CDONTS に関するドキュメントについては、次のマイクロソフト Web サイト (英語情報) を参照してください。

http://msdn.microsoft.com/library

左側のウィンドウで、[Messaging and Collaboration]、[Collaboration Data Objects]、[CDO 1.2.1] の順に展開します。

SQL Server OLE オートメーション ストアド プロシージャのドキュメントについては、SQL Server 2000 Books Online を参照してください。

先頭に戻る

CDO for Microsoft Windows 2000 (CDOSYS) の使用方法

CDOSYS には、Microsoft Windows 2000 でメッセージング アプリケーションを開発するためのオブジェクト モデルが用意されています。また、既存の CDONTS (CDO for Windows NT Server) ライブラリより強化された機能も備わっています。CDOSYS には、Windows 2000、およびローカルまたはリモートの SMTP サーバーが必要です。

プログラムで SMTP サーバーにアクセスできるように CDOSYS を構成することにより、開発者が SMTP サーバーの構成を行う際の柔軟性が高くなります。

CDOSYS の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
195683 INFO: Relationship between 1.x CDO Libraries and CDOSYS.DLL
CDOSYS では、リモートの SMTP サーバーに電子メールを送信できるため、SQL Server を実行しているコンピュータに Internet Information Server をインストールし、実行する必要はありません。また、SMTP 仮想サーバーを構成する必要もありません。必要な作業は、電子メールの送信に使用できる SQL Server でストアド プロシージャを作成することだけです。

SQL Mail ではなく CDOSYS を使用する場合は、SQL Server を実行しているコンピュータに Microsoft Outlook などのメール クライアントをインストールする必要はありません。また、Exchange サーバーもインストールしておく必要はありません。SMTP メールをサポートしている任意のメール サーバーを、リモートの SMTP メール サーバーとして使用できます。ただし、CDOSYS を使用する場合、SQL Server に送信された電子メールの読み取りおよび処理を行うことはできません。また、SQL Agent Mail の機能を置き換えることもできません。

SQL Server OLE オートメーション オブジェクトと CDOSYS を併用する場合、CDOSYS オブジェクト モデルの呼び出しには SQL Server OLE オートメーションが使用されます。この動作については、SQL Server 2000 Service Pack 1 (SP1) および SQL Server 2000 Service Pack 2 (SP2) でテストされています。SQL Server 2000 SP1 より前にリリースされたバージョンの SQL Server で、OLE オートメーション ストアド プロシージャから CDOSYS を呼び出すことができるかどうかについては、マイクロソフトでは保証していません。

ストアド プロシージャを作成して CDOSYS メールを送信する

以下のようなコードを使用して、master データベースにストアド プロシージャを作成することにより、SQL Server OLE オートメーション ストアド プロシージャを使用して CDOSYS オブジェクト モデルを呼び出して、電子メールを送信できます。
CREATE PROCEDURE [dbo].[sp_send_cdosysmail]    @From varchar(100) ,   @To varchar(100) ,   @Subject varchar(100)=" ",   @Body varchar(4000) =" "/*********************************************************************このストアド プロシージャでは、指定されたパラメータを基に電子メールを送信します。このストアド プロシージャでは、メールの構成はすべてハード コーディングされています。必要に応じてストアド プロシージャにコメントを付加してあります。CDOSYS オブジェクトの関連情報については、以下の MSDN Web サイトを参照してください。http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp***********************************************************************/    AS   Declare @iMsg int   Declare @hr int   Declare @source varchar(255)   Declare @description varchar(500)   Declare @output varchar(1000)--************* CDO.Message オブジェクトの作成 ************************   EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT--*************** Message オブジェクトの構成 ******************-- リモート SMTP サーバーを構成します。-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'-- サーバー名または IP アドレスを構成します。-- MailServerName を使用する SMTP サーバーの名前または IP アドレスに置き換えます。   EXEC @hr = sp_OASetProperty @iMsg, 'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', 'MailServerName' -- Message オブジェクトに構成を保存します。   EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null-- 電子メールのパラメータを設定します。   EXEC @hr = sp_OASetProperty @iMsg, 'To', @To   EXEC @hr = sp_OASetProperty @iMsg, 'From', @From   EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject-- HTML 電子メールを使用する場合、TextBody ではなく HTMLBody を使用します。   EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body   EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL-- エラー処理のサンプル   IF @hr <>0      select @hr     BEGIN       EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT       IF @hr = 0         BEGIN           SELECT @output = '  Source: ' + @source           PRINT  @output           SELECT @output = '  Description: ' + @description           PRINT  @output         END       ELSE         BEGIN           PRINT '  sp_OAGetErrorInfo failed.'           RETURN         END     END-- 必要に応じて処理ごとにエラー処理を行います。-- 作成したオブジェクトをクリーンアップします。   EXEC @hr = sp_OADestroy @iMsg   go
次に、作成したストアド プロシージャを使用して、適切なパラメータを指定します。
   declare @Body varchar(4000)   select @Body = 'This is a Test Message'   exec sp_send_cdosysmail 'someone@example.com','someone2@example.com','Test of CDOSYS',@Body
: sysadmin 固定サーバー ロールのメンバのみが、OLE オートメーション ストアド プロシージャを実行できます。SQL Server ユーザーが sysadmin 固定サーバー ロールのメンバでない場合、サンプルとして記載されているストアド プロシージャを使用してメールを送信することはできません。このような場合、CDOSYS でメールを送信するには、クライアント アプリケーションの開発が必要な場合があります。開発には、Microsoft Visual Basic アプリケーションなどを使用できます。

CDOSYS によって、cdoSMTPServerName に指定されているリモートの SMTP メール サーバーに電子メールが送信されます。

SMTP メール サーバーによって、To: 引数に指定されている電子メール アドレス (この例では、"someone2@example.com") にメールが送信されます。From: 引数に指定されている名前 (この例では "someone@example.com") が電子メールの送信者として表示され、"Test of CDOSYS" という件名、および @sHTML 変数に含まれている HTML 形式の電子メールも一緒に表示されます。

サンプルを変更して、テキスト ベースの電子メールまたは添付ファイルを送信することができます。CDOSYS に関するドキュメントについては、次のマイクロソフト Web サイト (英語情報) を参照してください。

MSDN Library

左側のウィンドウで、[Messaging and Collaboration]、[Collaboration Data Objects]、[CDO for Windows 2000] の順に展開します。

先頭に戻る
関連情報
SQL Server OLE オートメーション ストアド プロシージャの詳細については、SQL Server 2000 Books Online のトピック「OLE オートメーション ストアド プロシージャを使用したデータ型の変換」を参照してください。
先頭に戻る


この資料に回答が記載されていない質問については、次の Web サイトで Microsoft SQL Server ニュースグループを参照してください。Microsoft SQL Server ニュースグループ

この資料や他の Microsoft SQL Server の「サポート技術情報」 (Microsoft Knowledge Base) の資料に関するコメントは、SQLKB@Microsoft.com に寄せてください。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 312839 (最終更新日 2003-12-03) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
pop3 internet lotus notes novell groupwise
プロパティ

文書番号:312839 - 最終更新日: 05/12/2011 09:26:00 - リビジョン: 12.0

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbsqlmanagementtools kbhowtomaster KB312839
フィードバック