|
日時: 2008/07/05 13:26
名前: lightbox
|
日本語に UTF-8 を使用しているので、正式な使用と言うより、
ログ代わりで使うと良いと思います。
また、メールサーバがOracleサーバと同じネットワークであると想定して、
PLAIN 認証でログインしています。
拡張子:
PROCEDURE SEND_MAIL
(
PM_SERVER IN VARCHAR2
,PM_PORT IN PLS_INTEGER
,PM_USER IN VARCHAR2
,PM_PASS IN VARCHAR2
,PM_TO IN VARCHAR2
,PM_FROM IN VARCHAR2
,PM_SUBJECT IN VARCHAR2
,PM_BODY IN VARCHAR2
)
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
con UTL_SMTP.CONNECTION;
ret UTL_SMTP.reply;
/**********************************************************/
/* 内部プロシージャ */
/**********************************************************/
PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2)
AS
BEGIN
UTL_SMTP.WRITE_DATA(con, name || ': ' || header || UTL_TCP.CRLF);
END;
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
con := UTL_SMTP.OPEN_CONNECTION(PM_SERVER,PM_PORT,60);
UTL_SMTP.EHLO(con, 'localhost');
ret := UTL_SMTP.COMMAND(
con,
'AUTH',
'PLAIN ' ||
UTL_ENCODE.TEXT_ENCODE(
chr(0)||PM_USER||chr(0)||PM_PASS,null,1
)
);
DBMS_OUTPUT.PUT_LINE(ret.text);
UTL_SMTP.MAIL(con, PM_FROM);
UTL_SMTP.RCPT(con, PM_TO);
UTL_SMTP.OPEN_DATA(con);
send_header('From', '<'||PM_FROM||'>');
send_header('To', '<'||PM_TO||'>');
send_header('Date', TO_CHAR(
sysdate,
'Dy, dd Mon yyyy HH24:MI:SS',
'NLS_DATE_LANGUAGE = AMERICAN')||' +0900'
);
send_header('Subject',
UTL_ENCODE.MIMEHEADER_ENCODE(PM_SUBJECT,'UTF8',1) );
send_header('content-type',
'text/plain; charset=utf-8' );
send_header('content-transfer-encoding',
'base64' );
UTL_SMTP.WRITE_DATA(con, UTL_TCP.CRLF ||
UTL_ENCODE.TEXT_ENCODE(PM_BODY,'UTF8',1) );
UTL_SMTP.CLOSE_DATA(con);
UTL_SMTP.QUIT(con);
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN UTL_SMTP.TRANSIENT_ERROR OR UTL_SMTP.PERMANENT_ERROR THEN
BEGIN
DBMS_OUTPUT.PUT_LINE(
'メール送信でエラー:'||SQLCODE||':'||SQLERRM);
UTL_SMTP.QUIT(con);
EXCEPTION
WHEN
UTL_SMTP.TRANSIENT_ERROR OR
UTL_SMTP.PERMANENT_ERROR THEN
DBMS_OUTPUT.PUT_LINE(
'QUITが失敗しました:'||SQLCODE||':'||SQLERRM);
END;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
|