码迷,mamicode.com
首页 > 其他好文 > 详细

使用UTL_SMTP发送中文电子邮件

时间:2014-10-17 10:42:04      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:io   os   ar   使用   sp   数据   art   on   cti   

就是在原有TOM源码的基础上修改utl_smtp.write_data中,将输出内容进行一下数据转换,这样可以保证中文输出不会出现乱码
----------------------------- create or replace procedure html_email( p_to in varchar2, p_from in varchar2, p_subject in varchar2, p_text in varchar2 default null, p_html in varchar2 default null, p_smtp_hostname in varchar2, p_smtp_portnum in varchar2) is l_boundary varchar2(255) default ‘a1b2c3d4e3f2g1‘; l_connection utl_smtp.connection; l_body_html clob := empty_clob; --This LOB will be the email message l_offset number; l_ammount number; l_temp varchar2(32767) default null; begin l_connection := utl_smtp.open_connection( p_smtp_hostname, p_smtp_portnum ); utl_smtp.helo( l_connection, p_smtp_hostname ); utl_smtp.mail( l_connection, p_from ); utl_smtp.rcpt( l_connection, p_to ); l_temp := l_temp || ‘MIME-Version: 1.0‘ || chr(13) || chr(10); l_temp := l_temp || ‘To: ‘ || p_to || chr(13) || chr(10); l_temp := l_temp || ‘From: ‘ || p_from || chr(13) || chr(10); l_temp := l_temp || ‘Subject: ‘ || p_subject || chr(13) || chr(10); l_temp := l_temp || ‘Reply-To: ‘ || p_from || chr(13) || chr(10); l_temp := l_temp || ‘Content-Type: multipart/alternative; boundary=‘ || chr(34) || l_boundary || chr(34) || chr(13) || chr(10); ---------------------------------------------------- -- Write the headers dbms_lob.createtemporary( l_body_html, false, 10 ); dbms_lob.write(l_body_html,length(l_temp),1,l_temp); ---------------------------------------------------- -- Write the text boundary l_offset := dbms_lob.getlength(l_body_html) + 1; l_temp := ‘--‘ || l_boundary || chr(13)||chr(10); l_temp := l_temp || ‘content-type: text/plain; charset=us-ascii‘ || chr(13) || chr(10) || chr(13) || chr(10); dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp); ---------------------------------------------------- -- Write the plain text portion of the email l_offset := dbms_lob.getlength(l_body_html) + 1; dbms_lob.write(l_body_html,length(p_text),l_offset,p_text); ---------------------------------------------------- -- Write the HTML boundary l_temp := chr(13)||chr(10)||chr(13)||chr(10)||‘--‘ || l_boundary || chr(13) || chr(10); l_temp := l_temp || ‘content-type: text/html;‘ || chr(13) || chr(10) || chr(13) || chr(10); l_offset := dbms_lob.getlength(l_body_html) + 1; dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp); ---------------------------------------------------- -- Write the HTML portion of the message l_offset := dbms_lob.getlength(l_body_html) + 1; dbms_lob.write(l_body_html,length(p_html),l_offset,p_html); ---------------------------------------------------- -- Write the final html boundary l_temp := chr(13) || chr(10) || ‘--‘ || l_boundary || ‘--‘ || chr(13); l_offset := dbms_lob.getlength(l_body_html) + 1; dbms_lob.write(l_body_html,length(l_temp),l_offset,l_temp); ---------------------------------------------------- -- Send the email in 1900 byte chunks to UTL_SMTP l_offset := 1; l_ammount := 1900; utl_smtp.open_data(l_connection); while l_offset < dbms_lob.getlength(l_body_html) loop --utl_smtp.write_data(l_connection, -- dbms_lob.substr(l_body_html,l_ammount,l_offset)); UTL_SMTP.WRITE_RAW_DATA(L_CONNECTION,UTL_RAW.cast_to_raw(DBMS_LOB.SUBSTR(L_BODY_HTML,L_AMMOUNT,L_OFFSET))); 
l_offset := l_offset + l_ammount ; l_ammount := least(1900,dbms_lob.getlength(l_body_html) - l_ammount); end loop; utl_smtp.close_data(l_connection); utl_smtp.quit( l_connection ); dbms_lob.freetemporary(l_body_html); end; / show errors

使用UTL_SMTP发送中文电子邮件

标签:io   os   ar   使用   sp   数据   art   on   cti   

原文地址:http://www.cnblogs.com/huak/p/4030143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!