UTL_SMTPは、SMTP(Simple Mail Transfer Protocol)を使用して電子メールを送信するためのシステムパッケージです。
UTL_SMTPはUTL_TCPシステムパッケージに依存しているため、UTL_TCPシステムパッケージが有効であることを確認する必要があります。
機能の適用範囲
この内容はOceanBaseデータベースのOracleモードでのみ適用されます。
UTL_SMTPサブプログラムの概要
次の表は、OceanBaseデータベースの現在のバージョンでサポートされているUTL_SMTPサブプログラムとその簡単な説明を示しています。
サブプログラム |
説明 |
|---|---|
| OPEN_CONNECTION | SMTPサービスとの接続を開き、返します。 |
| CLOSE_CONNECTION | SMTP接続を閉じ、SMTP操作を終了します。データセッション中に電子メールを取り消す場合にのみ使用されます。 |
| QUIT | サーバーにQUITコマンドを送信し、SMTPセッションを終了し、サーバーとの接続を切断します。 |
| AUTH | SMTPサーバーに認証コマンドを送信します。 |
| COMMAND | 汎用SMTPコマンドを実行するために使用されます。 |
| COMMAND_REPLIES | 汎用SMTPコマンドを実行し、複数の応答行を受信するために使用されます。 |
| HELO | HELOコマンドを実行し、SMTPサービスとの初期ハンドシェイクを行うために使用されます。 |
| EHLO | EHLOコマンドを実行し、SMTPサービスとの初期ハンドシェイクを行うために使用されます。 |
MAILコマンドを実行し、SMTPサービスでメールトランザクションを開始し、送信者のメールアドレスを宣言するために使用されます。 |
|
| RCPT | RCPTコマンドを実行し、電子メールの受信者を指定するために使用されます。 |
| OPEN_DATA | DATAコマンドを送信し、メール内容の送信開始をサーバーに指示します。その後、write_dataおよびwrite_raw_dataを使用してメール内容を作成します。 |
| WRITE_DATA | テキストメール内容を送信するために使用されます。メールにデータを追加するには、このメソッドを複数回呼び出すことができます。 |
| WRITE_RAW_DATA | 生データメール内容を送信するために使用されます。メールにデータを追加するには、このメソッドを複数回呼び出すことができます。 |
| CLOSE_DATA | <CR><LF>.<CR><LF>を送信し、メールテキストの送信完了を示します。 |
| DATA | 電子メールの本文を指定するために使用されます。 |
| VRFY | VRFYコマンドを送信し、対象の電子メールアドレスの有効性を検証します。 |
| HELP | HELPコマンドを送信し、ヘルプ情報を取得します。 |
| NOOP | NOOPコマンドを送信し、対象の電子メールアドレスの有効性を検証します。 |
| RSET | RSETコマンドを送信し、現在の電子メールトランザクションを終了します。 |
使用例
DECLARE
-- メールサーバー情報を定義する
l_mailhost VARCHAR2(100) := 'smtp.example.com'; -- SMTPサーバーアドレス
l_mail_conn UTL_SMTP.connection; -- 接続オブジェクト
-- メールの内容
l_from VARCHAR2(100) := 'sender@example.com'; -- 送信者メール
l_to VARCHAR2(100) := 'receiver@example.com'; -- 受信者メール
l_subject VARCHAR2(100) := 'テストメール'; -- メールの件名
l_message VARCHAR2(4000) := 'これはOceanBaseデータベースからのテストメールです。'; -- メール本文
BEGIN
-- SMTPサーバーへの接続を開始する
l_mail_conn := UTL_SMTP.open_connection(l_mailhost, 25); -- 25はSMTPサービスの標準ポート
-- サーバーにHELOコマンドを送信する
UTL_SMTP.helo(l_mail_conn, l_mailhost);
-- メールの送信者を設定する
UTL_SMTP.mail(l_mail_conn, l_from);
-- メールの受信者を設定する
UTL_SMTP.rcpt(l_mail_conn, l_to);
-- データ転送を開始する
UTL_SMTP.open_data(l_mail_conn);
-- メールヘッダー情報を追加する
UTL_SMTP.write_data(l_mail_conn, 'From: ' || l_from || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'To: ' || l_to || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, 'Subject: ' || l_subject || UTL_TCP.crlf);
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf); -- ヘッダーと本文を区切る空行
-- メール本文を書き込む
UTL_SMTP.write_data(l_mail_conn, l_message || UTL_TCP.crlf);
-- データ転送を終了する
UTL_SMTP.close_data(l_mail_conn);
-- 接続を閉じる
UTL_SMTP.quit(l_mail_conn);
DBMS_OUTPUT.PUT_LINE('メール送信成功!');
EXCEPTION
WHEN OTHERS THEN
-- エラーが発生した場合、接続を閉じるよう試みる(既に開いている場合)
IF UTL_SMTP.is_open(l_mail_conn) THEN
UTL_SMTP.quit(l_mail_conn);
END IF;
-- 例外情報を表示する
RAISE;
END;
/