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

文書翻訳 文書翻訳
文書番号: 312839 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

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 サイトを参照してください。
https://solutionfinder.microsoft.com/http://support.microsoft.com/default.aspx?scid=/isapi/gomscom.asp?target=/japan/support/supportnet/is.asp
使用可能なサポート オプションおよびマイクロソフトの問い合わせ先の詳細については、次のマイクロソフト Web サイトを参照してください。
http://support.microsoft.com/contactus/

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) = null
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @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) を基に作成したものです。

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

プロパティ

文書番号: 312839 - 最終更新日: 2011年5月12日 - リビジョン: 12.0
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
キーワード:?
kbsqlmanagementtools kbhowtomaster KB312839
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com