UTL_SMTP发送邮件,防中文乱码处理!
2014-02-26 09:48
525 查看
--from http://blog.csdn.net/leeyon4151/article/details/6625122 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;
相关文章推荐
- 使用UTL_SMTP包发送邮件
- ThinkPHP实现支付宝接口功能
- ThinkPHP简单资料
- php更新修改excel中的内容例子
- php把session写入数据库示例
- PHP批量上传图片的具体实现方法介绍.
- php获取文件大小的方法
- php更新修改excel中的内容实例代码
- mac安装xdebug
- PotPlayer播放器——最强大的播放器 - imsoft.cnblogs
- 如何判定php环境是线程安全(TS)还是不安全(NTS)
- php另一种自动加载机制
- php中数组合并array_merge和+的区别
- mindjet DynaZip UnZIP Error:error creating output file错误解决方法
- php面向对象浅谈
- php有点进入状态了
- PHP系统学习(1)
- php的socket通信【转载】
- PHP类和对象
- PHP_pear的安装和使用