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操作を終了します。data sessionプロセスで電子メールをキャンセルする場合にのみ使用されます。 |
| 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;
/