UTL_SMTP モジュール
UTL_SMTP モジュールは、SMTP (Simple Mail Transfer Protocol) を介して E メールを送信する機能を提供します。
UTL_SMTP モジュールは、以下のルーチンで構成されます。
| ルーチン名 | 説明 |
|---|---|
| CLOSE_DATA プロシージャー | E メール・メッセージを終了します。 |
| COMMAND プロシージャー | SMTP コマンドを実行します。 |
| COMMAND_REPLIES プロシージャー | SMTP コマンドを実行します。複数の応答行が予想される場合はこちらを使用します。 |
| DATA プロシージャー | E メール・メッセージの本文を指定します。 |
| EHLO プロシージャー | SMTP サーバーとの初期ハンドシェークを実行し、拡張情報を返します。 |
| HELO プロシージャー | SMTP サーバーとの初期ハンドシェークを実行します。 |
| HELP プロシージャー | HELP コマンドを送信します。 |
| MAIL プロシージャー | メール・トランザクションを開始します。 |
| NOOP プロシージャー | NULL コマンドを送信します。 |
| OPEN_CONNECTION 関数 | 接続を開きます。 |
| OPEN_CONNECTION プロシージャー | 接続を開きます。 |
| OPEN_DATA プロシージャー | DATA コマンドを送信します。 |
| QUIT プロシージャー | SMTP セッションを終了し、切断します。 |
| RCPT プロシージャー | E メール・メッセージの受信者を指定します。 |
| RSET プロシージャー | 現在のメール・トランザクションを終了します。 |
| VRFY プロシージャー | E メール・アドレスの妥当性を検査します。 |
| WRITE_DATA プロシージャー | E メール・メッセージの一部分を書き込みます。 |
| WRITE_RAW_DATA プロシージャー | RAW データで構成される E メール・メッセージの一部分を書き込みます。 |
次の表は、モジュールで使用可能なパブリック変数をリストしています。
| パブリック変数 | データ・タイプ | 説明 |
|---|---|---|
| connection | RECORD | SMTP 接続の説明。 |
| reply | RECORD | SMTP 応答行。 |
CONNECTION レコード・タイプは、SMTP 接続の説明を記述します。
ALTER MODULE SYSIBMADM.UTL_SMTP PUBLISH TYPE connection AS ROW
(
/* name or IP address of the remote host running SMTP server */
host VARCHAR(255),
/* SMTP server port number */
port INTEGER,
/* transfer timeout in seconds */
tx_timeout INTEGER,
);REPLY レコード・タイプは、SMTP 応答行の説明を記述します。 REPLIES は、SMTP 応答行の配列です。
ALTER MODULE SYSIBMADM.UTL_SMTP PUBLISH TYPE reply AS ROW
(
/* 3 digit reply code received from the SMTP server */
code INTEGER,
/* the text of the message received from the SMTP server */
text VARCHAR(508)
);例
例 1: 以下のプロシージャーは、UTL_SMTP モジュールを使用してテキスト E メール・メッセージを構成し、送信します。
CREATE OR REPLACE PROCEDURE send_mail(
IN p_sender VARCHAR(4096),
IN p_recipient VARCHAR(4096),
IN p_subj VARCHAR(4096),
IN p_msg VARCHAR(4096),
IN p_mailhost VARCHAR(4096))
SPECIFIC send_mail
LANGUAGE SQL
BEGIN
DECLARE v_conn UTL_SMTP.CONNECTION;
DECLARE v_crlf VARCHAR(2);
DECLARE v_port INTEGER CONSTANT 25;
SET v_crlf = CHR(13) || CHR(10);
SET v_conn = UTL_SMTP.OPEN_CONNECTION(p_mailhost, v_port, 10);
CALL UTL_SMTP.HELO(v_conn, p_mailhost);
CALL UTL_SMTP.MAIL(v_conn, p_sender);
CALL UTL_SMTP.RCPT(v_conn, p_recipient);
CALL UTL_SMTP.DATA(
v_conn,
'Date: ' || TO_CHAR(SYSDATE, 'Dy, DD Mon YYYY HH24:MI:SS') || v_crlf ||
'From: ' || p_sender || v_crlf ||
'To: ' || p_recipient || v_crlf ||
'Subject: ' || p_subj || v_crlf ||
p_msg);
CALL UTL_SMTP.QUIT(v_conn);
END@
CALL send_mail('bwayne@mycorp.com','pparker@mycorp.com','Holiday Party',
'Are you planning to attend?','smtp.mycorp.com')@例 2: 以下の例では、DATA プロシージャーではなく、OPEN_DATA、WRITE_DATA、および CLOSE_DATA プロシージャーを使用します。
CREATE OR REPLACE PROCEDURE send_mail_2(
IN p_sender VARCHAR(4096),
IN p_recipient VARCHAR(4096),
IN p_subj VARCHAR(4096),
IN p_msg VARCHAR(4096),
IN p_mailhost VARCHAR(4096)) SPECIFIC send_mail_2
LANGUAGE SQL
BEGIN
DECLARE v_conn UTL_SMTP.CONNECTION;
DECLARE v_crlf VARCHAR(2);
DECLARE v_port INTEGER CONSTANT 25;
SET v_crlf = CHR(13) || CHR(10);
SET v_conn = UTL_SMTP.OPEN_CONNECTION(p_mailhost, v_port, 10);
CALL UTL_SMTP.HELO(v_conn, p_mailhost);
CALL UTL_SMTP.MAIL(v_conn, p_sender);
CALL UTL_SMTP.RCPT(v_conn, p_recipient);
CALL UTL_SMTP.OPEN_DATA(v_conn);
CALL UTL_SMTP.WRITE_DATA(v_conn, 'From: ' || p_sender || v_crlf);
CALL UTL_SMTP.WRITE_DATA(v_conn, 'To: ' || p_recipient || v_crlf);
CALL UTL_SMTP.WRITE_DATA(v_conn, 'Subject: ' || p_subj || v_crlf);
CALL UTL_SMTP.WRITE_DATA(v_conn, v_crlf || p_msg);
CALL UTL_SMTP.CLOSE_DATA(v_conn);
CALL UTL_SMTP.QUIT(v_conn);
END@
CALL send_mail_2('bwayne@mycorp.com','pparker@mycorp.com','Holiday Party',
'Are you planning to attend?','smtp.mycorp.com')@