您的位置:首页 > 编程语言 > PHP开发

UTL_SMTP发送邮件,防中文乱码处理!

2011-07-22 11:08 916 查看
DECLARE
V_CONN                UTL_SMTP.CONNECTION;
L_REC_ARR             ARRAY;
V_DB_NLS_CHARACTERSET VARCHAR2(40);
CURSOR L_TEMP IS
SELECT COL1, COL2, COL3, COL4, COL5, COL6, COL7 FROM TABLE_NAME;
;

L_REC_LIST    VARCHAR2(32767);
BODY_HTML_S   VARCHAR2(32767);
BODY_HTML_E   VARCHAR2(20);
BODY_HTML_C   VARCHAR2(32767);
L_MEG_CONTENT VARCHAR2(32767);
BEGIN
--获取服务器字符集
SELECT VALUE
INTO V_DB_NLS_CHARACTERSET
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER = 'NLS_CHARACTERSET';

--获取邮件接收人列表,格式如(xxx1@126.com,xxx2@126.com,xxx3@126.com...)
SELECT ADL.TO_RECIPIENTS
INTO L_REC_LIST
FROM ALR_DISTRIBUTION_LISTS ADL
WHERE ADL.NAME = 'ALERT_REC_LIST';

--表头HTML代码
BODY_HTML_S := '<table width="100%" border="1"  cellspacing="1" cellpadding="0" bgcolor="#000000" style="font-size:12px; font-family:Arial, Helvetica, sans-serif">' ||
'<tr>' ||
'<th bgcolor="#0099ff" scope="col">Header 1</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 2</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 3</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 4</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 5</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 6</th>' ||
'<th bgcolor="#0099ff" scope="col">Header 7</th>' ||
'</tr>';

--循环数据行
FOR R IN L_TEMP LOOP
BODY_HTML_C := BODY_HTML_C || '<tr>' ||
'<td width="8%" bgcolor="#FFFFFF" align="left">' ||
NVL(R.COL1, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="12%" bgcolor="#FFFFFF" align="left">' ||
NVL(R.COL2, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="20%" bgcolor="#FFFFFF" align="left">' ||
NVL(R.COL3, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="10%" bgcolor="#FFFFFF" align="left">' ||
NVL(R.COL4, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="8%" bgcolor="#FFFFFF" align="center">' ||
NVL(R.COL5, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="8%" bgcolor="#FFFFFF" align="center">' ||
NVL(R.COL6, ' ') || '</td>' || UTL_TCP.CRLF ||
'<td width="8%" bgcolor="#FFFFFF" align="center">' ||
NVL(R.COL7, ' ') || '</td>' || UTL_TCP.CRLF ||
'</tr>';
END LOOP;
--表格结束代码
BODY_HTML_E := '</table>';
--连接邮件服务器
V_CONNECTION := UTL_SMTP.OPEN_CONNECTION('10.2.3.111', 25);
UTL_SMTP.HELO(V_CONN, '10.2.3.111');
UTL_SMTP.COMMAND(V_CONN, 'AUTH LOGIN');
--身份验证,如果服务器允许匿名,此部分可以注释。
UTL_SMTP.COMMAND(V_CONN,
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('ebs_alert@xxxx.cn'))));
UTL_SMTP.COMMAND(V_CONN,
UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('*****'))));
--发件人
UTL_SMTP.MAIL(V_CONN, '"Workflow Mailer"<ebs_alert@xxxx.cn>');
--按","字符拆分收件人字符串,并返回伪数组.
L_REC_ARR := SPLIT(L_REC_LIST, ',');
--收件人(多个接收人可以循环该代码)
FOR I IN 1 .. L_REC_ARR.COUNT LOOP
UTL_SMTP.RCPT(V_CONN, L_REC_ARR(I) || '<' || L_REC_ARR(I) || '>');
END LOOP;

UTL_SMTP.OPEN_DATA(V_CONN);
--发件人
UTL_SMTP.WRITE_DATA(V_CONN,
'From: ' || 'ebs_alert@xxxx.cn' || UTL_TCP.CRLF);

L_MEG_CONTENT := L_MEG_CONTENT || 'MIME-Version: 1.0' || UTL_TCP.CRLF;
--收件人(多个接收人可以循环该代码)
FOR I IN 1 .. L_REC_ARR.COUNT LOOP
L_MEG_CONTENT := L_MEG_CONTENT || 'To: ' || L_REC_ARR(I) || '<' ||
L_REC_ARR(I) || '>' || UTL_TCP.CRLF;
END LOOP;

--开始拼接邮件格式字符串
L_MEG_CONTENT := L_MEG_CONTENT || 'Subject: ' || '这里是邮件主题 ' ||
UTL_TCP.CRLF;
L_MEG_CONTENT := L_MEG_CONTENT ||
'Content-Type: text/html;charset=gb2312' || UTL_TCP.CRLF;
L_MEG_CONTENT := L_MEG_CONTENT || 'Content-Transfer-Encoding: 8bit' ||
UTL_TCP.CRLF;
--邮件输出(防乱码处理)
UTL_SMTP.WRITE_RAW_DATA(V_CONN,
UTL_RAW.CAST_TO_RAW(CONVERT(L_MEG_CONTENT ||
BODY_HTML_S ||
BODY_HTML_C ||
BODY_HTML_E
UTL_TCP.CRLF,
'ZHS16GBK',
V_DB_NLS_CHARACTERSET)));
UTL_SMTP.CLOSE_DATA(V_CONNECTION);
UTL_SMTP.QUIT(V_CONNECTION);
END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: