2016-07-11 18 views
0

Oracles UTL_SMTPを使用してメールを送信しようとしています。それは動作しますが、私は奇妙な動作を取得し、私は理由を知らない。下のコードを使用してメールを送信すると、HTMLコードがすべてのタグとともに印刷されます。また、送信者やコンテンツの種類などのヘッダー情報も印刷されます。私は今このコードを数時間見てきましたが、問題の内容を把握することができませんでした。Oracle PL/SQL send HTMLメールが期待どおりに動作しない

助けてください!

l_mail_conn UTL_SMTP.connection; 
    l_mail_conn := UTL_SMTP.open_connection('myhost', '25'); 
    UTL_SMTP.helo(l_mail_conn, 'myhost'); 
    UTL_SMTP.mail(l_mail_conn, '[email protected]'); 
    UTL_SMTP.rcpt(l_mail_conn, '[email protected]'); 

    UTL_SMTP.open_data(l_mail_conn); 
    UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf); 
    UTL_SMTP.write_data(l_mail_conn, 'To: [email protected]' || UTL_TCP.crlf); 
    UTL_SMTP.write_data(l_mail_conn, 'From: [email protected]'|| UTL_TCP.crlf); 
    UTL_SMTP.write_data(l_mail_conn, 'Subject: test' || UTL_TCP.crlf); 
    UTL_SMTP.write_data(l_mail_conn, 'Reply-To: [email protected]' || UTL_TCP.crlf || UTL_TCP.crlf); 

    UTL_SMTP.write_data(l_mail_conn, 'Content-Type: text/html; charset="iso-8859-1"' || UTL_TCP.crlf || UTL_TCP.crlf); 
    UTL_SMTP.write_data(l_mail_conn, '<html> 
    <head> 
     <title>Test HTML message</title> 
    </head> 
    <body> 
     <p>This is a <b>HTML</b> <i>version</i> of the test message.</p> 
     <p><img src="http://oracle-base.com/images/site_logo.gif" alt="Site Logo" /> 
    </body> 
    </html>'); 
    UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); 

    UTL_SMTP.close_data(l_mail_conn); 

    UTL_SMTP.quit(l_mail_conn); 

そして、これは私がこのコードを使用してメールを送信するときに、私が得る電子メールである:あなたが行だけのカップルが欠落している

Content-Type: text/html; charset="iso-8859-1" 

<html> 
    <head> 
     <title>Test HTML message</title> 
    </head> 
    <body> 
     <p>This is a <b>HTML</b> <i>version</i> of the test message.</p> 
     <p><img src="http://oracle-base.com/images/site_logo.gif" alt="Site Logo" /> 
    </body> 
    </html> 
+1

マルチパートメッセージを作成する必要があります。 https://oracle-base.com/articles/misc/email-from-oracle-plsql(または、お気に入りの検索エンジンでUTL_SMTP htmlを検索する)を参照してください。 – StephaneM

+0

はい、私が使っていた文書ですが、私がやっているようです何か問題でも。あなたはそれが何かを見ることができますか? –

+0

代わりにUTL_MAILを使用できますか?はるかに簡単です。 –

答えて

2

HTMLコンテンツを送信するためには、不足している:l_boundaryが境界VARCHAR2で、p_html_msgがあなたのhtmlコードである

UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: text/html; charset="iso-8859-1"' || UTL_TCP.crlf || UTL_TCP.crlf); 

UTL_SMTP.write_data(l_mail_conn, p_html_msg); 
UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); 

を。

UTL_SMTP.write_data(l_mail_conn, '--' || l_boundary || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: ' || p_attach_mime || '; name="' || p_attach_name || '"' || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Content-Transfer-Encoding: base64' || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Content-Disposition: attachment; filename="' || p_attach_name || '"' || UTL_TCP.crlf || UTL_TCP.crlf); 

    FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_blob) - 1)/l_step) LOOP 
     UTL_SMTP.write_data(l_mail_conn, UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_attach_blob, l_step, i * l_step + 1)))); 
    END LOOP; 

UTL_SMTP.write_data(l_mail_conn, UTL_TCP.crlf || UTL_TCP.crlf); 

l_stepがPLS_INTEGER(例えば12000のための3の倍数)であるとp_attach_blobがあなたの添付ファイル(ファイル)です:添付ファイルの

そして、あなたのコードは、次の位に2行を追加するのこの部分を更新:

l_boundaryは、上記の境界VARCHAR2です
UTL_SMTP.open_data(l_mail_conn); 
UTL_SMTP.write_data(l_mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'To: [email protected]' || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'From: [email protected]m'|| UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Subject: test' || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Reply-To: [email protected]' || UTL_TCP.crlf || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'MIME-Version: 1.0' || UTL_TCP.crlf); 
UTL_SMTP.write_data(l_mail_conn, 'Content-Type: multipart/alternative; boundary="' || l_boundary || '"' || UTL_TCP.crlf || UTL_TCP.crlf); 

。ここで

あなたはあなたのコードを更新しました:

GIST PL/SQL updated

をそして、それはそれです。

よろしくお願いいたします。

+0

こんにちは、ありがとうございます。あなたが提案したコード(添付ファイルの部分を除く)を更新しましたが、同じ動作をします。すべてのメッセージヘッダーとHTMLタグが受信者に表示されます。 –

+0

メールヘッダーの作成に問題があります。あなたのコードを更新したファイルを作成しました。それは期待どおりに動作します。よろしくお願いします。 –

+0

あなたのような人はこの世では非常にまれです、あなたはいつもそれらを満たしています。ありがとうございました!あなたのコードは100%働いています(私のコードとほとんど同じですが、問題は何ですか?)。 –

関連する問題