289 UTL_SMTP
UTL_SMTP
パッケージは、RFC821で定められたSimple Mail Transfer Protocol(SMTP)による電子メール送信ができるように設計されています。
この章のトピックは、次のとおりです:
289.1 UTL_SMTPの概要
UTL_SMTP
のプロトコルは、電子メール・クライアントからSMTPサーバーに電子メールを伝送するための一連のコマンドで構成されています。UTL_SMTP
パッケージでは、SMTPコマンドへのインタフェースを提供します。
このパッケージには、多くのコマンドで利用できるプロシージャ形式およびファンクション形式のインタフェースが用意されています。ファンクション形式の場合、クライアントで処理するための応答はサーバーから戻されます。プロシージャ形式の場合は応答がチェックされ、一時的なエラー(400番台の応答コード)または永続的なエラー(500番台の応答コード)を示す応答のときには例外が発生します。そうでない場合は、応答を破棄します。
オリジナルのSMTPプロトコルによる通信には、7ビットASCIIが使用されることに注意してください。UTL_SMTP
を使用すると、すべてのテキスト・データ(つまり、VARCHAR2
のデータ)は、サーバーに送信される前にUS7ASCIIに変換されます。SMTP拡張8BITMIME [RFC1652]をサポートしているSMTPサーバーの実装の一部は、クライアントとサーバーの間の完全8ビット通信をサポートしています。DATAコマンドの本体は完全8ビットで転送できますが、それ以外のSMTPのコマンドと応答は7ビットである必要があります。ターゲットのSMTPサーバーが8BITMIME拡張要素をサポートしている場合、マルチバイト・データベースのユーザーは、非US7ASCIIのマルチバイトVARCHAR2
データをRAW
に変換し、WRITE_RAW_DATA
サブプログラムを使用して8ビットMIMEのエンコーディングを使用したマルチバイト・データを送信できます。
UTL_SMTP
では、RFC 821に指定されているSMTP通信が提供されますが、メッセージの内容をRFC 822に従って書式設定するためのAPI(電子メールの件名の設定など)は提供していません。メッセージの適切な書式設定は、ユーザー各自で行ってください。また、UTL_SMTP
は、SMTPを使用して電子メールを送信するように、SMTPサーバーをメール・クライアントに実装する機能は備えていません。
289.2 UTL_SMTPのセキュリティ・モデル
このパッケージは実行者権限のパッケージです。起動するユーザーには、接続する必要のあるリモート・ネットワーク・ホストに割り当てられたアクセス制御リストでconnect
権限が付与されている必要があります。
ノート:
ファイングレイン・アクセスの管理の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
289.3 UTL_SMTPの定数
UTL_SMTP
は、パラメータ値の指定時に使用するいくつかの定数を定義します。
これらを、次の表に示します。
表289-1 UTL_SMTPの定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
|
|
|
|
|
289.4 UTL_SMTPのタイプ
UTL_SMTP
は、CONNECTIONレコード・タイプおよびREPLY_REPLIESレコード・タイプを使用します。
CONNECTIONレコード・タイプ
SMTP接続を示すPL/SQLレコード・タイプです。
構文
TYPE connection IS RECORD ( host VARCHAR2(255), port PLS_INTEGER, tx_timeout PLS_INTEGER, private_tcp_con utl_tcp.connection, private_state PLS_INTEGER);
フィールド
表289-2 CONNECTIONレコード・タイプのフィールド
フィールド | 説明 |
---|---|
|
接続が確立したときのリモート・ホストの名前。接続が確立されない場合は |
|
接続したリモートSMTPサーバーのポート番号。接続が確立されない場合は |
|
この接続で読取りまたは書込み操作を中止するまでの |
|
実装目的でのみ使用されるプライベートのパラメータ。このフィールドは変更しないでください。 |
|
実装目的でのみ使用されるプライベートのパラメータ。このフィールドは変更しないでください。 |
使用上のノート
接続レコードの読取り専用フィールドは、OPEN_CONNECTIONファンクション
を使用して接続に成功した後、SMTP接続の情報を戻すために使用されます。これらのフィールドを変更しても、接続には影響ありません。private_tcp_con
フィールドおよびprivate_state
フィールドは、実装目的にのみ使用されます。これらのフィールドは変更しないでください。
REPLY_REPLIESレコード・タイプ
SMTP応答行を示すPL/SQLレコード・タイプです。各SMTP応答行は、応答コードとそれに続くテキスト・メッセージで構成されています。大半のSMTPコマンドに対しては単一の応答行ですが、一部のSMTPコマンドに対しては複数の応答行となります。このような場合は、複数の応答行を示すために応答レコードのPL/SQL表が使用されます。
構文
TYPE reply IS RECORD ( code PLS_INTEGER, text VARCHAR2(508)); TYPE replies IS TABLE OF reply INDEX BY BINARY_INTEGER;
フィールド
表289-3 REPLY、REPLIESレコード・タイプのフィールド
フィールド | 説明 |
---|---|
|
3桁の応答コード。 |
|
応答のテキスト・メッセージ。 |
289.5 UTL_SMTPの応答コード
SMTPサーバーは、メッセージまたはサーバー・ステータスを示す応答コードを送信します。
次のリストにSMTP応答コードを示します。
表289-4 SMTP応答コード
応答コード | 意味 |
---|---|
|
システム・ステータスまたはシステム・ヘルプの応答です。 |
|
ヘルプ・メッセージ(使用方法や特定の非標準コマンドの意味に関する情報で、この応答は人間であるユーザーにのみ有用です)。 |
|
|
|
|
|
要求したメール・アクションは正常で、完了しました。 |
|
ユーザーがローカルではありません。 |
|
OK。ノード |
|
OK。ノード |
|
メール入力を開始し、 |
|
オクテット・オフセットは、トランザクション・オフセットです。 |
|
|
|
要求したメール・アクションが実行されていません。メールボックスは使用不可です(メールボックス・ビジーなど)。 |
|
要求したアクションが終了しました。処理中にローカル・エラーが発生しました。 |
|
要求したアクションが実行されていません。システム記憶域不足です。 |
|
電子メールがありません。 |
|
一時的にTLSを使用できません。要求した認証メカニズムには暗号化が必要です。 |
|
ノード |
|
ノード |
|
構文エラーのため、コマンドを認識できません(コマンドラインが長すぎるなどのエラーも含まれます)。 |
|
パラメータまたは引数に構文エラーがあります。 |
|
コマンドが実装されていません。 |
|
コマンドの順序が不正です。 |
|
コマンド・パラメータが実装されていません。 |
|
|
|
|
|
認証メカニズムが脆弱です。 |
|
要求した認証メカニズムには暗号化が必要です。 |
|
要求したアクションが実行されていません。メールボックスは使用不可です(メールボックスが見つからない、アクセスできないなど)。 |
|
ユーザーがローカルではありません。 |
|
要求したメール・アクションが終了しました。記憶域の割当て超過です。 |
|
要求したアクションが実行されていません。メールボックス名が使用不可です(メールボックスの構文が正しくないなど)。 |
|
トランザクションに失敗しました。 |
289.6 UTL_SMTPの操作上のノート
SMTP接続は、SMTP接続を戻すOPEN_CONNECTION
ファンクションのコールによって開始されます。
接続の確立後、メールを送信するには、次のコールが必要です。
HELOファンクションおよびプロシージャ - 送信元のドメインを識別します。
MAILファンクションおよびプロシージャ- メールを開始し、送信元を指定します。
RCPTファンクション - 受信者を指定します。
OPEN_DATAファンクションおよびプロシージャ- メールの本文を開始します。
WRITE_RAW_DATAプロシージャ - メールの本文を書き込みます(複数のコール可)。
CLOSE_DATAファンクションおよびプロシージャ - メールの本文を閉じて、メールを送信します。
SMTP接続を終了するには、QUIT
ファンクションおよびプロシージャをコールします。
289.7 UTL_SMTPの例外
次の表に、UTL_SMTP
パッケージのインタフェースが呼び出す可能性のある例外を示します。
ネットワーク・エラーは、応答コード421(サービスは使用不可)になります。
表289-5 UTL_SMTPの例外
例外 | 説明 |
---|---|
|
無効な操作が行われたときに呼び出されます。つまり、OPEN_DATAファンクションおよびプロシージャをコールした後に、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャまたはCLOSE_DATAファンクションおよびプロシージャ以外のAPIをコールすることや、最初に |
|
400番台の応答コードを受け取った場合に呼び出されます。 |
|
500番台の応答コードを受け取った場合に呼び出されます。 |
289.8 UTL_SMTPのルールおよび制限
このAPIによって課される制限または範囲チェックはありません。ただし、SMTPの各種要素については、制限に注意する必要があります。制限を超えるデータが送信されると、サーバーからエラーが戻ります。
次の表は、UTL_SMTPサブプログラムでのサイズ制限について説明しています。
表289-6 SMTPのサイズ制限
要素 | サイズ制限 |
---|---|
|
ユーザー名の最大合計長は、64文字です。 |
|
ドメイン名またはドメイン番号の最大合計長は、64文字です。 |
|
reverse-pathまたはforward-pathの最大合計長は256文字です(句読点と要素のセパレータも含む)。 |
|
コマンド自体と |
|
応答コードと |
|
|
|
バッファリングを要する受信者の最大合計数は、100です。 |
289.9 UTL_SMTPの例
次の例では、アプリケーションでUTL_SMTP
を使用して電子メールを送信する方法を示します。ポート25でSMTPサーバーに接続し、簡単なテキスト・メッセージを送信します。
DECLARE c UTL_SMTP.CONNECTION; PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_DATA(c, name || ': ' || header || UTL_TCP.CRLF); END; BEGIN c := UTL_SMTP.OPEN_CONNECTION('smtp-server.acme.com'); UTL_SMTP.HELO(c, 'foo.com'); UTL_SMTP.MAIL(c, 'sender@foo.com'); UTL_SMTP.RCPT(c, 'recipient@foo.com'); UTL_SMTP.OPEN_DATA(c); send_header('From', '"Sender" <sender@foo.com>'); send_header('To', '"Recipient" <recipient@foo.com>'); send_header('Subject', 'Hello'); UTL_SMTP.WRITE_DATA(c, UTL_TCP.CRLF || 'Hello, world!'); UTL_SMTP.CLOSE_DATA(c); UTL_SMTP.QUIT(c); EXCEPTION WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN BEGIN UTL_SMTP.QUIT(c); EXCEPTION WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN NULL; -- When the SMTP server is down or unavailable, we don't have -- a connection to the server. The QUIT call raises an -- exception that we can ignore. END; raise_application_error(-20000, 'Failed to send mail due to the following error: ' || sqlerrm); END;
289.10 UTL_SMTPサブプログラムの要約
この表は、UTL_SMTP
サブプログラムを示し、簡単に説明しています。
表289-7 UTL_SMTPパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
SMTP接続をクローズして、現行のSMTP操作を終了します。 |
|
データ・セッションをクローズします。 |
|
一般的なSMTPコマンドを実行します。 |
|
一般的なSMTPコマンドを実行して、複数の応答行を取得します。 |
|
電子メール本文を送信します。 |
|
|
|
|
|
|
|
サーバーとの電子メール・トランザクションを開始します。宛先はメールボックスです。 |
|
|
|
SMTPサーバーへの接続をオープンします。 |
|
|
|
SMTPセッションを終了し、サーバーとの接続を切断します。 |
|
電子メール・メッセージの受信者を指定します。 |
|
現行の電子メール・トランザクションを終了します。 |
|
|
|
宛先の電子メール・アドレスの妥当性を検証します。 |
|
電子メール・メッセージの一部を書き込みます。 |
|
|
289.10.1 AUTHファンクションおよびプロシージャ
このサブプログラムは、AUTH
コマンドを送信して、SMTPサーバーに対する認証を行います。UTL_SMTP
パッケージは、ユーザー選択の認証方式を確認し、SMTPサーバーでサポートされない方式をスキップして、サポートされる最初の方式を使用します。
SMTPサーバーでサポートされる方式をEHLO
応答から判断するには、EHLOファンクションおよびプロシージャをコールする必要があります。それ以外の場合、UTL_SMTP
では、リストの最初の方式が使用されます。
構文
UTL_SMTP.AUTH ( c IN OUT NOCOPY connection, username IN VARCHAR2, password IN VARCHAR2, schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES) RETURN reply; UTL_SMTP.AUTH ( c IN OUT NOCOPY connection, username IN VARCHAR2, password IN VARCHAR2, schemes IN VARCHAR2 DEFAULT NON_CLEARTEXT_PASSWORD_SCHEMES);
パラメータ
表289-8 AUTHファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
ユーザー名。 |
|
パスワード。 |
|
|
戻り値
表289-9 AUTHファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
-
現在、
UTL_SMTP
でサポートされる認証方式は、PLAIN
、LOGIN
およびCRAM-MD5
のみです。 -
SMTPサーバーでは、
STARTTLS
コマンドを実行してSSL/TLSによってSMTP接続を保護した後に、サポートされる認証方式が変更される可能性があるため(PLAIN
やLOGIN
の追加など)、コール元では、STARTTLSファンクションおよびプロシージャをコールした後、UTL_SMTP
で再度EHLOファンクションおよびプロシージャをコールしてリストを更新する必要があります。
例
DECLARE
c utl_smtp.connection;
BEGIN
c := utl_smtp.open_connection(
host => 'smtp.example.com',
port => 25,
wallet_path => 'file:/oracle/wallets/smtp_wallet',
wallet_password => 'password',
secure_connection_before_smtp => FALSE);
UTL_SMTP.STARTTLS(c);
UTL_SMTP.AUTH(
c => c,
username => 'scott',
password => 'password'
schemes => utl_smtp.all_schemes);
END;
289.10.2 CLOSE_CONNECTIONプロシージャ
このプロシージャは、SMTP接続をクローズして、現行のSMTP操作を終了します。データ・セッション中に電子メールを取り消す場合にのみ、このプロシージャを使用してください。
SMTP接続を正常に終了させるには、QUITファンクションおよびプロシージャを使用します。
構文
UTL_SMTP.CLOSE_CONNECTION ( c IN OUT NOCOPY connection);
パラメータ
表289-10 CLOSE_CONNECTIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
289.10.3 CLOSE_DATAファンクションおよびプロシージャ
このサブプログラムは、<CR><LF>.<CR><LF>
(行の開始はシングル・ピリオド)の順序で送信することにより、電子メール・メッセージを終了します。
構文
UTL_SMTP.CLOSE_DATA ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.CLOSE_DATA ( c IN OUT NOCOPY connection);
パラメータ
表289-11 CLOSE_DATAファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
戻り値
表289-12 CLOSE_DATAファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
OPEN_DATA
、WRITE_DATA
、WRITE_RAW_DATA
およびCLOSE_DATA
へのコールは、正しい順序で実行する必要があります。プログラムは、DATA
コマンドをSMTPサーバーに送信するためにOPEN_DATA
をコールします。次に、実際のデータを送信するために、WRITE_DATA
またはWRITE_RAW_DATA
を繰り返しコールできます。データは、CLOSE_DATA
をコールして終了します。OPEN_DATA
がコールされた後にコールできるサブプログラムは、WRITE_DATA
、WRITE_RAW_DATA
またはCLOSE_DATA
のみです。他のサブプログラムのコールは、INVALID_OPERATION
例外の発生原因となります。
CLOSE_DATA
は、OPEN_CONNECTION
、HELO
またはEHLO
、MAIL
およびRCPT
がコールされた後にコールする必要があります。このルーチンがコールされるときは、SMTPサーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
SMTPサーバーからの応答は、CLOSE_DATA
へのコール中にデータの終了が送信されるまで行われないため、WRITE_DATA
のファンクション形式は存在しないことに注意してください。
289.10.4 COMMANDファンクションおよびプロシージャ
このサブプログラムは、一般的なSMTPコマンドを実行します。
構文
UTL_SMTP.COMMAND ( c IN OUT NOCOPY connection, cmd IN VARCHAR2, arg IN VARCHAR2 DEFAULT NULL) RETURN reply; UTL_SMTP.COMMAND ( c IN OUT NOCOPY connection, cmd IN VARCHAR2, arg IN VARCHAR2 DEFAULT NULL);
パラメータ
表289-13 COMMANDファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
サーバーに送信するSMTPコマンド。 |
|
SMTP引数へのオプション引数。 |
戻り値
表289-14 COMMANDファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
このファンクションは、一般的なSMTPコマンドを起動するために使用されます。COMMAND
は、単一の応答行が予想される場合にのみ使用します。複数の応答行が予想される場合は、COMMAND_REPLIES
を使用します。
COMMAND
は、SMTPサーバーからの応答が複数行ある場合、最終応答行のみを戻します。
289.10.5 COMMAND_REPLIESファンクション
このファンクションは、一般的なSMTPコマンドを実行して、複数の応答行を取得します。
構文
UTL_SMTP.COMMAND_REPLIES ( c IN OUT NOCOPY connection, cmd IN VARCHAR2, arg IN VARCHAR2 DEFAULT NULL) RETURN replies;
パラメータ
表289-15 COMMAND_REPLIESファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
サーバーに送信するSMTPコマンド。 |
|
SMTP引数へのオプション引数。 |
戻り値
表289-16 COMMAND_REPLIESファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。 |
使用上のノート
このファンクションは、一般的なSMTPコマンドを起動するために使用されます。COMMAND
は、単一の応答行が予想される場合にのみ使用します。複数の応答行が予想される場合は、COMMAND_REPLIES
を使用します。
COMMAND
は、SMTPサーバーからの応答が複数行ある場合、最終応答行のみを戻します。
289.10.6 DATAファンクションおよびプロシージャ
このサブプログラムは、電子メール・メッセージの本文を指定します。
構文
UTL_SMTP.DATA ( c IN OUT NOCOPY connection body IN VARCHAR2 CHARACTER SET ANY_CS) RETURN reply; UTL_SMTP.DATA ( c IN OUT NOCOPY connection body IN VARCHAR2 CHARACTER SET ANY_CS);
パラメータ
表289-17 DATAファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
送信するメッセージのヘッダーを含めたテキスト([RFC822]形式)。 |
戻り値
表289-18 DATAファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
bodyパラメータの内容がMIME(RFC822)の仕様に準拠していることをアプリケーションは確認する必要があります。DATA
ルーチンは、RFC821の要求に従って、<CR><LF>.<CR><LF>
の順序で(行の開始はシングル・ピリオド)メッセージを終了します。また、bodyの<CR><LF>.<CR><LF>
(シングル・ピリオド)の順序を<CR><LF>..<CR><LF>
(ダブル・ピリオド)に変換します。この変換によって、RFC821のセクション4.5.2に記述されている透過性が提供されます。
DATA
サブプログラムは、OPEN_CONNECTION
、HELO
またはEHLO
、MAIL
およびRCPT
がコールされた後にコールする必要があります。このルーチンがコールされるときは、SMTPサーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
サーバーからの応答は、ステータス・コード250で開始するメッセージになります。初期DATA
コマンドから受信した354という応答は、コール元に戻されません。
289.10.7 EHLOファンクションおよびプロシージャ
このサブプログラムは、EHLO
コマンドを使用してSMTPサーバーとの初期ハンドシェイクを実行します。
構文
UTL_SMTP.EHLO ( c IN OUT NOCOPY connection, domain IN) RETURN replies; UTL_SMTP.EHLO ( c IN OUT NOCOPY connection, domain IN);
パラメータ
表289-19 EHLOファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
ローカル(送信側)ホストのドメイン名。識別の目的で使用されます。 |
戻り値
表289-20 EHLOファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。 |
使用上のノート
EHLO
のインタフェースは、サーバーがその構成に関するより多くの詳細な情報を戻せることを除くとHELO
と同じです。[RFC1869]には、戻される情報の書式が指定されています。書式は、PL/SQLアプリケーションでこのコールのファンクション形式を使用して取り出すことができます。HELO
との互換性のために、サーバーが戻すテキストの各行はステータス・コード250で開始されます。
関連ファンクション
289.10.8 HELOファンクションおよびプロシージャ
このサブプログラムは、HELO
コマンドを使用してSMTPサーバーとの初期ハンドシェイクを実行します。
構文
UTL_SMTP.HELO ( c IN OUT NOCOPY connection, domain IN VARCHAR2) RETURN reply; UTL_SMTP.HELO ( c IN OUT NOCOPY connection, domain IN VARCHAR2);
パラメータ
表289-21 HELOファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
ローカル(送信側)ホストのドメイン名。識別の目的で使用されます。 |
戻り値
表289-22 HELOファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
RFC 821では、接続した後でクライアントはサーバーに対してクライアント自体を識別する必要があると指定されています。このルーチンは、その識別を実行します。このルーチンをコールする前に、OPEN_CONNECTIONファンクションをコールして接続をオープンにしておく必要があります。
サーバーからの応答は、ステータス・コード250で開始するメッセージになります。
関連ファンクション
289.10.9 HELPファンクション
このファンクションは、HELP
コマンドを送信します。
構文
UTL_SMTP.HELP ( c IN OUT NOCOPY connection, command IN VARCHAR2 DEFAULT NULL) RETURN replies;
パラメータ
表289-23 HELPファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
ヘルプ・メッセージを取得するコマンド。 |
戻り値
表289-24 HELPファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。 |
289.10.10 MAILファンクションおよびプロシージャ
このサブプログラムは、サーバーとのメール・トランザクションを開始します。宛先はメールボックスです。
構文
UTL_SMTP.MAIL ( c IN OUT NOCOPY connection, sender IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL) RETURN reply; UTL_SMTP.MAIL ( c IN OUT NOCOPY connection, sender IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL);
パラメータ
表289-25 MAILファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
メッセージを送信するユーザーの電子メール・アドレス。 |
|
[RFC1869]のセクション6に定義されている |
戻り値
表289-26 MAILファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
このコマンドはメッセージを送信しません。準備を開始するのみです。トランザクションを完了するには、RCPT
およびDATA
へのコールを後に続ける必要があります。SMTPサーバーへの接続はオープン状態で、HELO
またはEHLO
コマンドはすでに送信されている必要があります。
サーバーからの応答は、ステータス・コード250で開始するメッセージになります。
289.10.11 NOOPファンクションおよびプロシージャ
このサブプログラムは、NULL
コマンドを発行します。
構文
UTL_SMTP.NOOP ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.NOOP ( c IN OUT NOCOPY connection);
パラメータ
表289-27 NOOPファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
戻り値
表289-28 NOOPファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
-
このコマンドは、サーバーから正常な応答を引き出すことにのみ有効です。
OPEN_CONNECTION
でサーバーへの接続を確立した後は、いつでもこのコマンドを発行できます。NOOP
コマンドは、サーバーが接続され、正しくリスニングが行われていることを検証するために使用します。 -
このコマンドの応答は、ステータス・コード250で開始する単一の行になります。
289.10.12 OPEN_CONNECTIONファンクション
このファンクションは、SMTPサーバーへの接続をオープンします。
構文
UTL_SMTP.OPEN_CONNECTION ( host IN VARCHAR2, port IN PLS_INTEGER DEFAULT 25, c OUT connection, tx_timeout IN PLS_INTEGER DEFAULT NULL, wallet_path IN VARCHAR2 DEFAULT NULL, wallet_password IN VARCHAR2 DEFAULT NULL, secure_connection_before_smtp IN BOOLEAN DEFAULT FALSE, secure_host IN VARCHAR2 DEFAULT NULL) RETURN reply; UTL_SMTP.OPEN_CONNECTION ( host IN VARCHAR2, port IN PLS_INTEGER DEFAULT 25, tx_timeout IN PLS_INTEGER DEFAULT NULL, wallet_path IN VARCHAR2 DEFAULT NULL, wallet_password IN VARCHAR2 DEFAULT NULL, secure_connection_before_smtp IN BOOLEAN DEFAULT FALSE, secure_host IN VARCHAR2 DEFAULT NULL) RETURN connection;
パラメータ
表289-29 OPEN_CONNECTIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SMTPサーバーのホストの名前。 |
|
SMTPサーバーがリスニングするポート番号(通常は25)。 |
|
SMTP接続。 |
|
この接続で読取りまたは書込み操作を中止するまでの |
|
SSL/TLS用のOracle Walletを含むディレクトリ・パス。形式は Oracleウォレットのかわりにオペレーティング・システムの証明書ストアを使用する場合は、 |
|
Walletをオープンするためのパスワード。Walletの自動ログインが有効の場合は、パスワードを
|
|
|
|
セキュアな接続が使用されるときにSMTPサーバーの証明書の共通名(CN)と照合するホスト名。これは、
|
戻り値
表289-30 OPEN_CONNECTIONファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
-
サーバーからの応答は、ステータス・コード220で開始するメッセージになります。
-
UTL_SMTP
.CONNECTION
を戻すOPEN_CONNECTION
のバージョンでは、接続が初めて確立した時点でSMTPサーバーから戻される応答コードをチェックします。応答がエラーを示した場合は、例外が発生します。そうでない場合は、応答を破棄します。応答を調べるには、REPLY
を戻すOPEN_CONNECTION
を起動します。 -
tx_timeout
は、読込み操作および書込み操作の両方を制御するものです。ただし、現行のリリースでは実装が制限されているため、tx_timeout
による書込み操作の制御は行われません。
例
DECLARE
c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION(
host => 'smtp.example.com',
port => 465,
wallet_path => 'file:/oracle/wallets/smtp_wallet',
wallet_password => 'password',
secure_connection_before_smtp => TRUE);
END;
289.10.13 OPEN_DATAファンクションおよびプロシージャ
このサブプログラムは、DATA
コマンドを送信し、その後、WRITE_DATA
およびWRITE_RAW_DATA
で電子メール・メッセージの一部を書き込みます。
構文
UTL_SMTP.OPEN_DATA ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.OPEN_DATA ( c IN OUT NOCOPY connection);
パラメータ
表289-31 OPEN_DATAファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
送信するメッセージのヘッダーを含めたテキストの一部(RFC822形式)。 |
戻り値
表289-32 OPEN_DATAファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
-
OPEN_DATA
、WRITE_DATA
、WRITE_RAW_DATA
およびCLOSE_DATA
へのコールは、正しい順序で実行する必要があります。プログラムは、DATA
コマンドをSMTPサーバーに送信するためにOPEN_DATA
をコールします。次に、実際のデータを送信するために、WRITE_DATA
またはWRITE_RAW_DATA
を繰り返しコールできます。データは、CLOSE_DATA
をコールして終了します。OPEN_DATA
がコールされた後にコールできるサブプログラムは、WRITE_DATA
、WRITE_RAW_DATA
またはCLOSE_DATA
のみです。他のサブプログラムのコールは、INVALID_OPERATION
例外の発生原因となります。 -
OPEN_DATA
は、OPEN_CONNECTION
、HELO
またはEHLO
、MAIL
およびRCPT
がコールされた後にコールする必要があります。このルーチンがコールされるときは、SMTPサーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
289.10.14 QUITファンクションおよびプロシージャ
このサブプログラムは、SMTPセッションを終了し、サーバーとの接続を切断します。
構文
UTL_SMTP.QUIT ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.QUIT ( c IN OUT NOCOPY connection);
パラメータ
表289-33 QUITファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
戻り値
表289-34 QUITファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
QUIT
コマンドは、セッションを終了するというクライアントの意図をSMTPサーバーに伝えます。伝えた後に、OPEN_CONNECTION
で確立した接続をクローズします。このOPEN_CONNECTIONは、このコマンドの実行前にコールされている必要があります。QUIT
の発行時にメール・トランザクションが進行中の場合は、RSET
と同様に放棄されます。
このコマンドのファンクション形式は、正常終了時にステータス・コード221で開始する単一の行を戻します。SMTPサーバーへの接続は、どのような場合にもクローズされます。c
のREMOTE_HOST
およびREMOTE_PORT
フィールドはリセットされます。
関連ファンクション
289.10.15 RCPTファンクション
このサブプログラムは、電子メール・メッセージの受信者を指定します。
構文
UTL_SMTP.RCPT ( c IN OUT NOCOPY connection, recipient IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL) RETURN reply; UTL_SMTP.RCPT ( c IN OUT NOCOPY connection, recipient IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL);
表289-35 RCPTファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
メッセージの送信先ユーザーの電子メール・アドレス。 |
|
[RFC1869]のセクション6に定義されているRCPTコマンドへの追加パラメータ。XXX=XXX (XXX=XXX ....)の形式に従う必要があります。 |
戻り値
表289-36 RCPTファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
複数の受信者にメッセージを送信するには、このルーチンを複数回コールします。各起動で1つの電子メール・アドレスへの配信がスケジュールされます。メッセージ・トランザクションは、先行するMAIL
へのコールによって開始されており、メール・サーバーへの接続はすでにオープン状態にあり、先行するOPEN_CONNECTION
およびHELO
またはEHLO
へのコールによってそれぞれ初期化されている必要があります。
サーバーからの応答は、ステータス・コード250または251で開始するメッセージになります。
289.10.16 RSETファンクションおよびプロシージャ
このサブプログラムは、現行のメール・トランザクションを終了します。
構文
UTL_SMTP.RSET ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.RSET ( c IN OUT NOCOPY connection);
パラメータ
表289-37 RSETファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
戻り値
表289-38 RSETファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
-
このコマンドによって、クライアントは構成処理中の電子メール・メッセージを取り消すことができます。メールは送信されません。クライアントは、SMTPサーバーへの接続が
OPEN_CONNECTION
でオープンされた後は、DATA
またはOPEN_DATA
がコールされるまで、いつでもRSET
をコールできます。ただし、電子メール・データの送信が始まってしまった後では、その送信を中止できません。 -
サーバーは、
RSET
に対してステータス・コード250で開始するメッセージで応答します。
関連ファンクション
289.10.17 STARTTLSファンクションおよびプロシージャ
このサブプログラムは、STARTTLS
コマンドを送信し、SSL/TLSを使用してSMTP接続を保護します。
SSL/TLSでは、OPEN_CONNECTIONファンクションによる接続のオープン時に指定する必要のあるOracle Walletが要求されます。
構文
UTL_SMTP.STARTTLS ( c IN OUT NOCOPY connection, secure_host IN VARCHAR2 DEFAULT NULL) RETURN reply; UTL_SMTP.STARTTLS ( c IN OUT NOCOPY connection, secure_host IN VARCHAR2 DEFAULT NULL);
パラメータ
表289-39 STARTTLSファンクションおよびプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
SMTPサーバーの証明書の共通名(CN)と照合するホスト名。これは、
|
戻り値
表289-40 STARTTLSファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
SMTP応答。 |
使用上のノート
STARTTLS
コマンドは、暗号化されていない接続で、SMTPサーバーがEHLO
コマンドの応答に対してこのコマンドがサポートされることを示した場合にのみ発行する必要があります。暗号化に使用するWalletは、OPEN_CONNECTION
ファンクションによる初期SMTP接続のオープン時に指定されている必要があります。
例
DECLARE
c utl_smtp.connection;
BEGIN
c := utl_smtp.open_connection(
host => 'smtp.example.com',
port => 25,
wallet_path => 'file:/oracle/wallets/smtp_wallet',
wallet_password => 'password',
secure_connection_before_smtp => FALSE);
utl_smtp.starttls(c);
END
289.10.18 VRFYファンクション
このファンクションは、宛先の電子メール・アドレスの妥当性を検証します。
構文
UTL_SMTP.VRFY ( c IN OUT NOCOPY connection recipient IN VARCHAR2) RETURN reply;
パラメータ
表289-41 VRFYファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
検証される電子メール・アドレス。 |
戻り値
表289-42 VRFYファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「UTl_SMTPのタイプ」の「REPLY_REPLIESレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上のノート
サーバーは、宛先アドレスrecipient
の解決を試みます。解決した場合、サーバーは受信者のフルネームと完全修飾メールボックス・パスを戻します。この要求の実行前には、OPEN_CONNECTION
、およびHELO
またはEHLO
を介して、サーバーへの接続が確立されている必要があります。
検証が正常に終了した場合は、ステータス・コード250または251で開始する1行以上の行が戻されます。
289.10.19 WRITE_DATAプロシージャ
このプロシージャは、電子メール・メッセージの一部を書き込みます。WRITE_DATA
を繰り返しコールして、電子メール・メッセージにデータを追加します。
構文
UTL_SMTP.WRITE_DATA ( c IN OUT NOCOPY connection, data IN VARCHAR2 CHARACTER SET ANY_CS);
パラメータ
表289-43 WRITE_DATAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
送信するメッセージのヘッダーを含めたテキストの一部([RFC822]形式)。 |
使用上のノート
-
OPEN_DATAファンクションおよびプロシージャ、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャおよびCLOSE_DATAファンクションおよびプロシージャへのコールは、正しい順序で実行する必要があります。プログラムは、
DATA
コマンドをSMTPサーバーに送信するためにOPEN_DATA
をコールします。次に、実際のデータを送信するために、WRITE_DATA
またはWRITE_RAW_DATA
を繰り返しコールできます。データは、CLOSE_DATA
をコールして終了します。OPEN_DATA
がコールされた後にコールできるサブプログラムは、WRITE_DATA
、WRITE_RAW_DATA
またはCLOSE_DATA
のみです。他のサブプログラムのコールは、INVALID_OPERATION
例外の発生原因となります。 -
bodyパラメータの内容がMIME(RFC822)の仕様に準拠していることをアプリケーションは確認する必要があります。
DATA
ルーチンは、RFC821の要求に従って、<CR><LF>.<CR><LF>
の順序で(行の開始はシングル・ピリオド)メッセージを終了します。また、bodyの<CR><LF>.<CR><LF>
(シングル・ピリオド)の順序を<CR><LF>..<CR><LF>
(ダブル・ピリオド)に変換します。この変換によって、RFC821のセクション4.5.2に記述されている透過性が提供されます。 -
OPEN_DATAファンクションおよびプロシージャ、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャ、およびCLOSE_DATAファンクションおよびプロシージャは、OPEN_CONNECTIONファンクション、HELOファンクションおよびプロシージャまたはEHLOファンクションおよびプロシージャ、MAILファンクションおよびプロシージャ、およびRCPTファンクションがコールされた後にコールする必要があります。このルーチンがコールされるときは、SMTPサーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
-
SMTPサーバーからの応答は、CLOSE_DATAファンクションおよびプロシージャへのコール中にデータの終了が送信されるまで行われないため、WRITE_DATAプロシージャのファンクション形式は存在しないことに注意してください。
-
WRITE_DATA
を使用して送信するテキスト(VARCHAR2
)データは、送信前にUS7ASCIIに変換されます。テキストにマルチバイト文字が含まれている場合は、テキスト内のUS7ASCIIに変換できない各マルチバイト文字が'?'文字に置き換えられます。EHLO
サブプログラムを使用してSMTPサーバーとの間で8BITMIME拡張要素を処理する場合は、最初にUTL_RAW
パッケージでテキストをRAW
に変換してから、WRITE_RAW_DATA
を使用してRAW
データを送信することによって、マルチバイトのVARCHAR2
データを送信できます。
289.10.20 WRITE_RAW_DATAプロシージャ
このプロシージャは、電子メール・メッセージの一部を書き込みます。WRITE_RAW_DATA
を繰り返しコールして、電子メール・メッセージにデータを追加します。
構文
UTL_SMTP.WRITE_RAW_DATA ( c IN OUT NOCOPY connection data IN RAW);
パラメータ
表289-44 WRITE_RAW_DATAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
SMTP接続。 |
|
送信するメッセージのヘッダーを含めたテキストの一部([RFC822]形式)。 |
使用上のノート
-
OPEN_DATAファンクションおよびプロシージャ、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャおよびCLOSE_DATAファンクションおよびプロシージャへのコールは、正しい順序で実行する必要があります。プログラムは、
DATA
コマンドをSMTPサーバーに送信するためにOPEN_DATA
をコールします。次に、実際のデータを送信するために、WRITE_DATA
またはWRITE_RAW_DATA
を繰り返しコールできます。データは、CLOSE_DATA
をコールして終了します。OPEN_DATA
がコールされた後にコールできるサブプログラムは、WRITE_DATA
、WRITE_RAW_DATA
またはCLOSE_DATA
のみです。他のサブプログラムのコールは、INVALID_OPERATION
例外の発生原因となります。 -
bodyパラメータの内容がMIME(RFC822)の仕様に準拠していることをアプリケーションは確認する必要があります。
DATA
ルーチンは、RFC821の要求に従って、<CR><LF>.<CR><LF>
の順序で(行の開始はシングル・ピリオド)メッセージを終了します。また、bodyの<CR><LF>.<CR><LF>
(シングル・ピリオド)の順序を<CR><LF>..<CR><LF>
(ダブル・ピリオド)に変換します。この変換によって、RFC821のセクション4.5.2に記述されている透過性が提供されます。 -
OPEN_DATAファンクションおよびプロシージャ、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャ、およびCLOSE_DATAファンクションおよびプロシージャは、OPEN_CONNECTIONファンクション、HELOファンクションおよびプロシージャまたはEHLOファンクションおよびプロシージャ、MAILファンクションおよびプロシージャ、およびRCPTファンクションがコールされた後にコールする必要があります。このルーチンがコールされるときは、SMTPサーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
-
SMTPサーバーからの応答は、CLOSE_DATAファンクションおよびプロシージャへのコール中にデータの終了が送信されるまで行われないため、WRITE_DATAプロシージャのファンクション形式は存在しないことに注意してください。