Skip to Main Content

Japanese

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

PL/SQL UTL_SMTP使用時の日本語文字化け対策を教えて下さい。

845598Mar 8 2011 — edited Mar 10 2011
こんにちは。
今更とおもわれるでしょうが、UTL_SMTPを使ったメール発信の結果、
日本語の文字化けが発生しました。
対応策をご存知の方、教えてくださいませ。

同じプログラムを使用して、環境により文字化けが発生します。
状況は下記の通りです。
64BIT環境は32BIT環境とは対応方法が異なるのでしょうか?

1.文字化けする場合

環境
 OS:Windows(R) Server 2003 R2 Enterprise x64 Edition
 DB:Oracle 10G Release 10.2.0.4.0 - 64bit Production

受信結果(メーラ:Outlook)
 タイトル部 → 繧ソ繧、繝医Ν
 本文    → 繝。繝シ繝ォ譛ャ譁・
          縺ゅ>縺・∴縺・
          ・ア・イ・ウ・エ・オ・ア
          ABCDEFG

2.文字化けしない場合

環境
 OS:Windows Server 2003 Standard Edition(32bit)
 DB:Oracle 10G Enterprise Edition Release 10.2.0.1.0 - Prod

受信結果(メーラ:Outlook)
 タイトル部 → タイトル
 本文    → メール本文
          あいうえお
          アイウエオア
          ABCDEFG


使用したプログラムは下記のサンプルプログラムです。

/*--メール送信プロシージャー*/
CREATE OR REPLACE PROCEDURE SEND_MAIL IS

VC_SVR VARCHAR2(40) := 'smtp.fal.com'; --メールサーバ名,IP
VC_FROM VARCHAR2(40) := 'fal@net.com'; --発信元
VC_TO VARCHAR2(40);
VC_SUB VARCHAR2(80);
VC_MSG VARCHAR2(2000);
SMTP UTL_SMTP.CONNECTION;

BEGIN

/*データセット*/
VC_TO := 'fal@net.com'; --送信先メールアドレス
VC_SUB := 'タイトル'; --メールタイトル
VC_MSG := 'メール本文' || CHR(13) || CHR(10); --メール本文
VC_MSG := VC_MSG || 'あいうえお' || CHR(13) || CHR(10);
VC_MSG := VC_MSG || 'アイウエオア' || CHR(13) || CHR(10);
VC_MSG := VC_MSG || 'ABCDEFG' || CHR(13) || CHR(10);

/*メール送信*/
SMTP := UTL_SMTP.OPEN_CONNECTION(VC_SVR, 25);
UTL_SMTP.HELO(SMTP, VC_SVR);
UTL_SMTP.MAIL(SMTP, VC_FROM);
UTL_SMTP.RCPT(SMTP, VC_TO);
UTL_SMTP.OPEN_DATA(SMTP);
UTL_SMTP.WRITE_DATA(SMTP, 'TO:' || VC_TO || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, 'FROM:' || VC_FROM || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, 'SUBJECT:=?ISO-2022-JP?B?');
UTL_SMTP.WRITE_RAW_DATA(SMTP,
UTL_ENCODE.BASE64_ENCODE
(
UTL_RAW.CAST_TO_RAW(VC_SUB)
)
);
UTL_SMTP.WRITE_DATA(SMTP, '?=' || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, 'MIME-VERSION: 1.0' || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, 'CONTENT-TYPE: TEXT/PLAIN;' || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, CHR(9) || 'CHARSET="ISO-2022-JP"' || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, 'CONTENT-TRANSFER-ENCODING: BASE64' || CHR(13) || CHR(10));
UTL_SMTP.WRITE_DATA(SMTP, CHR(13) || CHR(10));
UTL_SMTP.WRITE_RAW_DATA(SMTP,
UTL_ENCODE.BASE64_ENCODE
(
UTL_RAW.CAST_TO_RAW(VC_MSG)
)
);
UTL_SMTP.CLOSE_DATA(SMTP);
UTL_SMTP.QUIT(SMTP);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 7 2011
Added on Mar 8 2011
5 comments
6,548 views