UTL_SMTP
パッケージは、RFC821で定められたSimple Mail Transfer Protocol(SMTP)による電子メール送信ができるように設計されています。
関連項目: 『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
定数
タイプ
応答コード
例外
ルールおよび制限
例
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サーバーをメール・クライアントに実装する機能は備えていません。
このパッケージは実行者権限のパッケージです。起動するユーザーには、接続する必要のあるリモート・ネットワーク・ホストに割り当てられたアクセス制御リストでconnect
権限が付与されている必要があります。
注意: 詳細は、『Oracle Databaseセキュリティ・ガイド』のPL/SQLパッケージおよびタイプでのファイングレイン・アクセスの管理に関する項を参照してください。 |
注意: この機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。 |
UTL_SMTP
パッケージでは、表236-1「UTL_SMTPの定数」の定数が使用されます。
表236-1 UTL_SMTPの定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
|
|
|
|
|
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);
フィールド
表236-2 CONNECTIONレコード・タイプのフィールド
フィールド | 説明 |
---|---|
|
接続が確立したときのリモート・ホストの名前。接続が確立されない場合は |
|
接続したリモートSMTPサーバーのポート番号。接続が確立されない場合は |
|
この接続で読取りまたは書込み操作を中止するまでの |
|
実装目的でのみ使用されるプライベートのパラメータ。このフィールドは変更しないでください。 |
|
実装目的でのみ使用されるプライベートのパラメータ。このフィールドは変更しないでください。 |
使用上の注意
接続レコードの読取り専用フィールドは、OPEN_CONNECTIONファンクション
を使用して接続に成功した後、SMTP接続の情報を戻すために使用されます。これらのフィールドを変更しても、接続には影響ありません。private_tcp_con
フィールドおよびprivate_state
フィールドは、実装目的にのみ使用されます。これらのフィールドは変更しないでください。
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;
フィールド
次のリストにSMTP応答コードを示します。
表236-4 SMTP応答コード
応答コード | 意味 |
---|---|
|
システム・ステータスまたはシステム・ヘルプの応答です。 |
|
ヘルプ・メッセージ(使用方法や特定の非標準コマンドの意味に関する情報で、この応答は人間であるユーザーにのみ有用です)。 |
|
|
|
|
|
要求したメール・アクションは正常で、完了しました。 |
|
ユーザーがローカルではありません。 |
|
OK。ノード |
|
OK。ノード |
|
メール入力を開始し、 |
|
オクテット・オフセットは、トランザクション・オフセットです。 |
|
|
|
要求したメール・アクションが実行されていません。メールボックスは使用不可です(メールボックス・ビジーなど)。 |
|
要求したアクションが終了しました。処理中にローカル・エラーが発生しました。 |
|
要求したアクションが実行されていません。システム記憶域不足です。 |
|
電子メールがありません。 |
|
一時的にTLSを使用できません。要求した認証メカニズムには暗号化が必要です。 |
|
ノード |
|
ノード |
|
構文エラーのため、コマンドを認識できません(コマンドラインが長すぎるなどのエラーも含まれます)。 |
|
パラメータまたは引数に構文エラーがあります。 |
|
コマンドが実装されていません。 |
|
コマンドの順序が不正です。 |
|
コマンド・パラメータが実装されていません。 |
|
|
|
|
|
認証メカニズムが脆弱です。 |
|
要求した認証メカニズムには暗号化が必要です。 |
|
要求したアクションが実行されていません。メールボックスは使用不可です(メールボックスが見つからない、アクセスできないなど)。 |
|
ユーザーがローカルではありません。 |
|
要求したメール・アクションが終了しました。記憶域の割当て超過です。 |
|
要求したアクションが実行されていません。メールボックス名が使用不可です(メールボックスの構文が正しくないなど)。 |
|
トランザクションに失敗しました。 |
次の表に、UTL_SMTP
パッケージのインタフェースが呼び出す可能性のある例外を示します。ネットワーク・エラーは、応答コード421(サービスは使用不可)になります。
表236-5 UTL_SMTPの例外
|
無効な操作が行われたときに呼び出されます。つまり、OPEN_DATAファンクションおよびプロシージャをコールした後に、WRITE_DATAプロシージャ、WRITE_RAW_DATAプロシージャまたはCLOSE_DATAファンクションおよびプロシージャ以外のAPIをコールすることや、最初に |
|
400番台の応答コードを受け取った場合に呼び出されます。 |
|
500番台の応答コードを受け取った場合に呼び出されます。 |
APIによる制限または範囲チェックはありません。ただし、SMTPの各種要素については、次のサイズ制限に注意する必要があります。制限を超えるデータが送信されると、サーバーからエラーが戻ります。
表236-6 SMTPのサイズ制限
要素 | サイズ制限 |
---|---|
|
ユーザー名の最大合計長は、64文字です。 |
|
ドメイン名またはドメイン番号の最大合計長は、64文字です。 |
|
reverse-pathまたはforward-pathの最大合計長は256文字です(句読点と要素のセパレータも含む)。 |
|
コマンド自体と |
|
応答コードと |
|
|
|
バッファリングを要する受信者の最大合計数は、100です。 |
次の例では、アプリケーションで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;
表236-7 UTL_SMTPパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
|
|
SMTP接続をクローズして、現行のSMTP操作を終了します。 |
|
データ・セッションをクローズします。 |
|
一般的なSMTPコマンドを実行します。 |
|
一般的なSMTPコマンドを実行して、複数の応答行を取得します。 |
|
電子メール本文を送信します。 |
|
|
|
|
|
|
|
サーバーとの電子メール・トランザクションを開始します。宛先はメールボックスです。 |
|
|
|
SMTPサーバーへの接続をオープンします。 |
|
|
|
SMTPセッションを終了し、サーバーとの接続を切断します。 |
|
電子メール・メッセージの受信者を指定します。 |
|
現行の電子メール・トランザクションを終了します。 |
|
|
|
宛先の電子メール・アドレスの妥当性を検証します。 |
|
電子メール・メッセージの一部を書き込みます。 |
|
|
このサブプログラムは、AUTH
コマンドを送信して、SMTPサーバーに対する認証を行います。UTL_SMTP
パッケージは、ユーザー選択の認証方式を確認し、SMTPサーバーでサポートされない方式をスキップして、サポートされる最初の方式を使用します。SMTPサーバーでサポートされる方式をEHLO
応答から判断するには、EHLOファンクションおよびプロシージャをコールする必要があります。それ以外の場合、UTL_SMTP
では、リストの最初の方式が使用されます。
注意: この機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。 |
構文
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);
戻り値
表236-9 AUTHファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「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;
このプロシージャは、SMTP接続をクローズして、現行のSMTP操作を終了します。データ・セッション中に電子メールを取り消す場合にのみ、このプロシージャを使用してください。SMTP接続を正常に終了させるには、QUITファンクションおよびプロシージャを使用します。
このサブプログラムは、<CR><LF>.<CR><LF>
(行の開始はシングル・ピリオド)の順序で送信することにより、電子メール・メッセージを終了します。
構文
UTL_SMTP.CLOSE_DATA ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.CLOSE_DATA ( c IN OUT NOCOPY connection);
戻り値
表236-12 CLOSE_DATAファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「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
のファンクション形式は存在しないことに注意してください。
このサブプログラムは、一般的な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);
戻り値
表236-14 COMMANDファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
このファンクションは、一般的なSMTPコマンドを実行して、複数の応答行を取得します。
構文
UTL_SMTP.COMMAND_REPLIES ( c IN OUT NOCOPY connection, cmd IN VARCHAR2, arg IN VARCHAR2 DEFAULT NULL) RETURN replies;
このサブプログラムは、電子メール・メッセージの本文を指定します。
構文
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);
戻り値
表236-18 DATAファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「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という応答は、コール元に戻されません。
このサブプログラムは、EHLO
コマンドを使用してSMTPサーバーとの初期ハンドシェイクを実行します。
構文
UTL_SMTP.EHLO ( c IN OUT NOCOPY connection, domain IN) RETURN replies; UTL_SMTP.EHLO ( c IN OUT NOCOPY connection, domain IN);
このサブプログラムは、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);
戻り値
表236-22 HELOファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上の注意
RFC 821では、接続した後でクライアントはサーバーに対してクライアント自体を識別する必要があると指定されています。このルーチンは、その識別を実行します。このルーチンをコールする前に、OPEN_CONNECTIONファンクションをコールして接続をオープンにしておく必要があります。
サーバーからの応答は、ステータス・コード250で開始するメッセージになります。
このサブプログラムは、サーバーとのメール・トランザクションを開始します。宛先はメールボックスです。
構文
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);
戻り値
表236-26 MAILファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
このサブプログラムは、NULL
コマンドを発行します。
構文
UTL_SMTP.NOOP ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.NOOP ( c IN OUT NOCOPY connection);
戻り値
表236-28 NOOPファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
このファンクションは、SMTPサーバーへの接続をオープンします。
注意: wallet_path 、wallet_password およびsecure_connection_before_smtp に関連する機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。 |
構文
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) 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) RETURN reply;
パラメータ
表236-29 OPEN_CONNECTIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
SMTPサーバーのホストの名前。 |
|
SMTPサーバーがリスニングするポート番号(通常は25)。 |
|
SMTP接続。 |
|
この接続で読取りまたは書込み操作を中止するまでの |
|
SSL/TLS用のOracle Walletを含むディレクトリ・パス。形式は |
|
Walletをオープンするためのパスワード。Walletの自動ログインが有効の場合は、パスワードを |
|
|
戻り値
表236-30 OPEN_CONNECTIONファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上の注意
サーバーからの応答は、ステータス・コード220で開始するメッセージになります。
UTL_SMTP
.CONNECTION
を戻すOPEN_CONNECTION
のバージョンでは、接続が初めて確立した時点でSMTPサーバーから戻される応答コードをチェックします。応答がエラーを示した場合は、例外が発生します。そうでない場合は、応答を破棄します。応答を調べるには、REPLY
を戻すOPEN_CONNECTION
を起動します。
tx_timeout
は、読込み操作および書込み操作の両方を制御するものです。ただし、現行のリリースでは実装が制限されているため、tx_timeout
による書込み操作の制御は行われません。
このサブプログラムは、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);
戻り値
表236-32 OPEN_DATAファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「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サーバーへの接続がオープン状態で、メール・トランザクションがアクティブ状態である必要があります。
このサブプログラムは、SMTPセッションを終了し、サーバーとの接続を切断します。
構文
UTL_SMTP.QUIT ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.QUIT ( c IN OUT NOCOPY connection);
戻り値
表236-34 QUITファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
使用上の注意
QUIT
コマンドは、セッションを終了するというクライアントの意図をSMTPサーバーに伝えます。伝えた後に、OPEN_CONNECTION
で確立した接続をクローズします。このOPEN_CONNECTIONは、このコマンドの実行前にコールされている必要があります。QUIT
の発行時にメール・トランザクションが進行中の場合は、RSET
と同様に放棄されます。
このコマンドのファンクション形式は、正常終了時にステータス・コード221で開始する単一の行を戻します。SMTPサーバーへの接続は、どのような場合にもクローズされます。c
のREMOTE_HOST
およびREMOTE_PORT
フィールドはリセットされます。
このサブプログラムは、電子メール・メッセージの受信者を指定します。
構文
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);
戻り値
表236-36 RCPTファンクションおよびプロシージャ・ファンクションの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
このサブプログラムは、現行のメール・トランザクションを終了します。
構文
UTL_SMTP.RSET ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.RSET ( c IN OUT NOCOPY connection);
戻り値
表236-38 RSETファンクションおよびプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
コマンドの応答(「reply、repliesレコード・タイプ」を参照)。複数の応答が存在する場合は、最後の応答が戻されます。 |
このサブプログラムは、STARTTLS
コマンドを送信し、SSL/TLSを使用してSMTP接続を保護します。SSL/TLSでは、OPEN_CONNECTIONファンクションによる接続のオープン時に指定する必要のあるOracle Walletが要求されます。
構文
UTL_SMTP.STARTTLS ( c IN OUT NOCOPY connection) RETURN reply; UTL_SMTP.STARTTLS ( c IN OUT NOCOPY connection);
このプロシージャは、電子メール・メッセージの一部を書き込みます。WRITE_DATA
を繰り返しコールして、電子メール・メッセージにデータを追加します。
使用上の注意
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
データを送信できます。
このプロシージャは、電子メール・メッセージの一部を書き込みます。WRITE_RAW_DATA
を繰り返しコールして、電子メール・メッセージにデータを追加します。
使用上の注意
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プロシージャのファンクション形式は存在しないことに注意してください。