APEX_MAIL
パッケージを使用してOracle Application Expressアプリケーションから電子メールを送信できます。このパッケージは、Oracleで提供されるUTL_SMTP
パッケージをベースとして構築されています。このような依存性があるため、APEX_MAILを使用するには、UTL_SMTP
パッケージがインストールされており、機能している必要があります。
関連項目: UTL_SMTPパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |
APEX_MAIL
には3つのプロシージャが含まれています。アプリケーションから外部へ電子メール・メッセージを送信するには、APEX_MAIL.SEND
を使用します。APEX_MAIL_QUEUE
に格納されたメール・メッセージを配信するには、APEX_MAIL.PUSH_QUEUE
を使用します。アプリケーションから外部へ添付ファイルとして電子メール・メッセージを送信するには、APEX_MAIL.ADD_ATTACHMENT
を使用します。
トピック:
注意: 電子メールを送信する最も効率的な方法は、DBMS_JOBまたはDBMS_SCHEDULERパッケージを使用してバックグラウンド・ジョブを作成し、アクティブなメール・キューに格納されているすべてのメール・メッセージを定期的に送信することです。Application Expressアプリケーションのコンテキストの外部からAPEX_MAILパッケージをコールするには、次の例のようにapex_util.set_security_group_id をコールする必要があります。
for c1 in ( select workspace_id from apex_applications where application_id = p_app_id ) loop apex_util.set_security_group_id(p_security_group_id => c1.workspace_id); end loop; |
関連項目: Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイドの「アプリケーションからの電子メールの送信」 |
アプリケーション・ビルダー・アプリケーションから電子メールを送信する前に、次のステップを実行する必要があります。
Oracle Application Express管理サービスにログインし、インスタンスの設定ページで電子メール設定を構成します。Oracle Application Express管理ガイドを参照してください。
さらに、Oracle Database 11g リリース1(11.1)でOracle Application Expressを実行している場合、外部へのメールを有効化する必要があります。Oracle Database 11g リリース1(11.1)では、ネットワーク・サービスと通信する機能はデフォルトで無効になっています。『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』のOracle Database 11gのネットワーク・サービスの有効化に関するセクションを参照してください。
ヒント: 新しいワークスペースリクエストが承認されたときにユーザーにログイン資格証明が電子メールで自動的に送信されるように、Oracle Application Expressを構成できます。詳細は、Oracle Application Express管理ガイドの「割当てモードの指定」を参照してください。 |
このプロシージャは、アプリケーションから外部へ電子メール・メッセージを添付ファイルとして送信します。1つの電子メールに複数の添付ファイルを追加するには、1つの電子メール・メッセージに対してAPEX_MAIL.ADD_ATTACHMENT
を繰り返しコールします。
構文
APEX_MAIL.ADD_ATTACHMENT( p_mail_id IN NUMBER, p_attachment IN BLOB, p_filename IN VARCHAR2, p_mime_type IN VARCHAR2);
パラメータ
表16-1に、ADD_ATTACHMENT
プロシージャで使用可能なパラメータを示します。
表16-1 ADD_ATTACHMENTのパラメータ
パラメータ | 説明 |
---|---|
|
電子メールに関連付けられている数値ID。これは、電子メールの本文を作成する |
|
電子メール・メッセージに添付するバイナリ・コンテンツを含む |
|
電子メール添付ファイルに関連付けられているファイル名。 |
|
電子メールの添付ファイルに関連付けられる有効なMIMEタイプ(またはインターネット・メディア・タイプ)。 |
例
次の例に、APEX_APPLICATION_FILES
に格納されているファイルにアクセスする方法、およびこれらを外部への電子メール・メッセージに追加する方法を示します
DECLARE l_id NUMBER; BEGIN l_id := APEX_MAIL.SEND( p_to => 'fred@flintstone.com', p_from => 'barney@rubble.com', p_subj => 'APEX_MAIL with attachment', p_body => 'Please review the attachment.', p_body_html => '<b>Please</b> review the attachment'); FOR c1 IN (SELECT filename, blob_content, mime_type FROM APEX_APPLICATION_FILES WHERE ID IN (123,456)) LOOP APEX_MAIL.ADD_ATTACHMENT( p_mail_id => l_id, p_attachment => c1.blob_content, p_filename => c1.filename, p_mime_type => c1.mime_type); END LOOP; COMMIT; END; /
Oracle Application Expressでは、APEX_MAIL_QUEUE
という名前の表に未送信の電子メール・メッセージが格納されます。APEX_MAIL.PUSH_QUEUE
プロシージャを呼び出して、このキューに格納されているメール・メッセージを指定のSMTPゲートウェイに手動で送信できます。
Oracle Application Expressによって、正常に送信されたメッセージのログが、サーバーのローカル時間でのタイムスタンプとともにHTMLDB_MAIL_LOG
に作成されます。電子メールを送信するための最も有効な方法は、バックグラウンド・ジョブ(DBMS_JOB
パッケージを使用)を作成して、アクティブなメール・キューに格納されているすべてのメール・メッセージを定期的に送信することです。
関連項目: Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイドの「アプリケーションからの電子メールの送信」 |
構文
APEX_MAIL.PUSH_QUEUE( p_smtp_hostname IN VARCHAR2 DEFAULT NULL, p_smtp_portno IN NUMBER DEFAULT NULL);
パラメータ
表16-2に、PUSH_QUEUE
プロシージャで使用可能なパラメータを示します。
これらのパラメータの値は下位互換性を確保するために提供されていますが、各パラメータの値は無視されます。電子メールを送信する際のSMTPゲートウェイのホスト名およびSMTPゲートウェイのポート番号は、「環境設定の管理」で入力された値のみが使用されます。
関連項目: Oracle Application Express管理ガイドの「電子メール設定の構成」 |
例
次の例に、シェル・スクリプトを使用してAPEX_MAIL.PUSH_QUEUE
プロシージャを使用する方法を示します。この例はUNIX/LINUXインストールにのみ適用します。
SQLPLUS / <<EOF APEX_MAIL.PUSH_QUEUE; DISCONNECT EXIT EOF
関連項目: Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイドの「アプリケーションからの電子メールの送信」 |
このプロシージャは、アプリケーションから外部へ電子メール・メッセージを送信します。このプロシージャを使用してVARCHAR2
またはCLOB
をp_body
およびp_body_html
に渡すことができますが、データ型は同じである必要があります。つまり、CLOB
をP_BODY
に、VARCHAR2
をp_body_html
に渡すことはできません。
APEX_MAIL.SEND
を使用する際は、次の点に注意してください。
1行は1000文字以下にしてください。SMTP/MIME仕様によると、1行は1000文字以下にしてください。この制限に準拠するには、キャリッジ・リターンまたはライン・フィード文字を追加してp_body
またはp_body_html
パラメータを1000文字以下のチャンクに分割する必要があります。そうしないと、不完全なメッセージ、不要な感嘆符を含むメッセージなど、電子メール・メッセージにエラーが発生します。
プレーン・テキストおよびHTML電子メール・コンテンツ。値をp_body_html
ではなくp_body
に渡すと、プレーン・テキスト・メッセージが作成されます。値をp_body
およびp_body_html
に渡すと、プレーン・テキストとHTMLの両方のコンテンツを含むマルチパート・メッセージが作成されます。受信者の電子メール・クライアントの設定および機能によって表示内容が決定されます。ほとんどの最新の電子メール・クライアントはHTML形式の電子メールを読むことができますが、セキュリティ問題に対処するため、この機能を無効にしているユーザーがいることに注意してください。
イメージを使用しないでください。<img />
タグを使用してp_body_html
でイメージを参照する場合、受信者がそのイメージを表示するには、受信者の電子メール・クライアントがそのイメージにアクセスできる必要があることに注意してください。
たとえば、次のようにネットワーク上にあるhello.gif
というイメージを参照すると想定します。
<img src="http://someserver.com/hello.gif" alt="Hello" />]
この例では、イメージは電子メールに添付されるのではなく、電子メールによって参照されます。受信者がこのイメージを表示するには、Webブラウザを使用してこのイメージにアクセスできる必要があります。イメージがファイアウォールの内側にあり、受信者がファイアウォールの外側にいる場合、イメージは表示されません。このため、イメージは使用しないでください。イメージを含める必要がある場合は、イメージにアクセスできない場合にテキストの説明を提供できるようにALT属性を含めるようにしてください。
構文
APEX_MAIL.SEND( p_to IN VARCHAR2, p_from IN VARCHAR2, p_body IN [ VARCHAR2 | CLOB ], p_body_html IN [ VARCHAR2 | CLOB ] DEFAULT NULL, p_subj IN VARCHAR2 DEFAULT NULL, p_cc IN VARCHAR2 DEFAULT NULL, p_bcc IN VARCHAR2 DEFAULT NULL, p_replyto IN VARCHAR2);
パラメータ
表16-3では、SEND
プロシージャで使用可能なパラメータについて説明します。
表16-3 SENDのパラメータ
パラメータ | 説明 |
---|---|
|
電子メールの送信先となる有効な電子メール・アドレス(必須)。電子メール・アドレスが複数の場合、カンマで区切られたリストを使用します。 |
|
電子メールの送信元となる電子メール・アドレス(必須)。この電子メール・アドレスは有効なアドレスである必要があります。有効でない場合、メッセージは送信されません。 |
|
HTML形式ではなく、プレーン・テキスト形式の電子メールの本文(必須)。値が |
|
HTML形式の電子メールの本文。これは、 |
|
電子メールの件名 |
|
電子メールの内容のコピー先となる有効な電子メール・アドレス。電子メール・アドレスが複数の場合、カンマで区切られたリストを使用します。 |
|
電子メールの内容のブラインド・コピー先となる有効な電子メール・アドレス。電子メール・アドレスが複数の場合、カンマで区切られたリストを使用します。 |
|
返信先のメール・ヘッダーのアドレス。このパラメータの使用方法は次のとおりです。
|
例
次の例では、APEX_MAIL.SEND
を使用してアプリケーションからプレーン・テキストの電子メール・メッセージを送信する方法を示します。
-- Example One: Plain Text only message DECLARE l_body CLOB; BEGIN l_body := 'Thank you for your interest in the APEX_MAIL package.'||utl_tcp.crlf||utl_tcp.crlf; l_body := l_body ||' Sincerely,'||utl_tcp.crlf; l_body := l_body ||' The Application Express Dev Team'||utl_tcp.crlf; apex_mail.send( p_to => 'some_user@somewhere.com', -- change to your email address p_from => 'some_sender@somewhere.com', -- change to a real senders email address p_body => l_body, p_subj => 'APEX_MAIL Package - Plain Text message'); END; /
次の例では、APEX_MAIL.SEND
を使用してアプリケーションからHTML形式の電子メール・メッセージを送信する方法を示します。キャリッジ・リターンまたはライン・フィード(CRLF)を 1000文字ごとに含める必要があります。次の例では、utl_tcp.crlf
を使用します。
-- Example Two: Plain Text / HTML message DECLARE l_body CLOB; l_body_html CLOB; BEGIN l_body := 'To view the content of this message, please use an HTML enabled mail client.'||utl_tcp.crlf; l_body_html := '<html> <head> <style type="text/css"> body{font-family: Arial, Helvetica, sans-serif; font-size:10pt; margin:30px; background-color:#ffffff;} span.sig{font-style:italic; font-weight:bold; color:#811919;} </style> </head> <body>'||utl_tcp.crlf; l_body_html := l_body_html ||'<p>Thank you for your interest in the <strong>APEX_MAIL</strong> package.</p>'||utl_tcp.crlf; l_body_html := l_body_html ||' Sincerely,<br />'||utl_tcp.crlf; l_body_html := l_body_html ||' <span class="sig">The Application Express Dev Team</span><br />'||utl_tcp.crlf; l_body_html := l_body_html ||'</body></html>'; apex_mail.send( p_to => 'some_user@somewhere.com', -- change to your email address p_from => 'some_sender@somewhere.com', -- change to a real senders email address p_body => l_body, p_body_html => l_body_html, p_subj => 'APEX_MAIL Package - HTML formatted message'); END; /