Plsql PL/SQL-使用utl\U smtp发送西里尔字符
在我的例子中,我使用NVARCHAR2列在Oracle 11g db中存储和检索西里尔字符(参见下面的一个简单示例) 我现在的目标是使用NVARCHAR2列准备并发送一封使用UTL_SMTP的电子邮件 我发现有几个帖子与类似的东西相关,但没有一个是有效的(即:) 我收到的电子邮件中总是有转换问题。Plsql PL/SQL-使用utl\U smtp发送西里尔字符,plsql,utf-8,Plsql,Utf 8,在我的例子中,我使用NVARCHAR2列在Oracle 11g db中存储和检索西里尔字符(参见下面的一个简单示例) 我现在的目标是使用NVARCHAR2列准备并发送一封使用UTL_SMTP的电子邮件 我发现有几个帖子与类似的东西相关,但没有一个是有效的(即:) 我收到的电子邮件中总是有转换问题。 是否有人也有同样的需求并找到了解决方案?经过几天的工作和大量的谷歌搜索,我找到了适合我的解决方案。 代码如下: create or replace procedure pr_send_mail_by_
是否有人也有同样的需求并找到了解决方案?经过几天的工作和大量的谷歌搜索,我找到了适合我的解决方案。 代码如下:
create or replace procedure pr_send_mail_by_rawdata(p_subject nvarchar2, p_body nvarchar2) as
lv_server varchar2(255) := 'localhost';
lv_rcpt varchar2(255) := 'you@gmail.com';
lv_from varchar2(255) := 'me <me@gmail.com>';
lv_subject varchar2(4000):= 'cyrillic';
lv_conn utl_smtp.connection;
begin
lv_conn := utl_smtp.open_connection(lv_server);
UTL_SMTP.helo (lv_conn, lv_server);
UTL_SMTP.mail (lv_conn, lv_from);
UTL_SMTP.rcpt (lv_conn, lv_rcpt);
UTL_SMTP.open_data (lv_conn);
UTL_SMTP.WRITE_DATA(lv_conn, 'From' || ': ' || lv_from || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(lv_conn, 'To' || ': ' || lv_rcpt || UTL_TCP.CRLF);
lv_subject := '=?UTF8?Q?'||replace(utl_encode.TEXT_ENCODE(p_subject,'UTF8'),'='||chr(13) || chr(10)) || '?=';
UTL_SMTP.write_raw_data(lv_conn, utl_raw.cast_to_raw('Subject' || ': ' || lv_subject||utl_tcp.crlf ));
utl_smtp.write_data(lv_conn, 'MIME-version: 1.0' || utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, 'Content-Type: text/html; charset=KOI8-R;'||utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, 'Content-Transfer-Encoding: QUOTED-PRINTABLE'||utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, utl_encode.TEXT_ENCODE(p_body,'CL8KOI8R'));
utl_smtp.write_data(lv_conn, utl_tcp.crlf);
utl_smtp.close_data(lv_conn);
utl_smtp.quit(lv_conn);
end;
创建或替换过程pr_send_mail_by_rawdata(p_subject nvarchar2,p_body nvarchar2)作为
lv_服务器varchar2(255):='localhost';
lv_rcpt varchar2(255):='you@gmail.com';
来自varchar2的lv_(255):=“我”;
lv_subject varchar2(4000):=“西里尔语”;
lv_连接utl_smtp.connection;
开始
lv_连接:=utl_smtp.打开_连接(lv_服务器);
UTL_SMTP.helo(lv_连接,lv_服务器);
UTL_SMTP.mail(lv_conn,lv_from);
UTL_SMTP.rcpt(lv_连接,lv_rcpt);
UTL_SMTP.open_数据(lv_连接);
UTL|U SMTP.WRITE|U数据(lv|u conn,'From'| |':'| | lv| u From | | UTL|u TCP.CRLF);
UTL|U SMTP.写入|U数据(lv|conn,'至'| |':'| | lv|U rcpt | | UTL|U TCP.CRLF);
lv|U主题:='=?UTF8?Q?'|替换(utl|U编码。文本|U编码(p|U主题,'UTF8'),'='| chr(13)| | chr(10))| |?=';
UTL|U SMTP.写入原始数据(lv|U conn,UTL|U raw.cast|U to|U raw('Subject'| |':'| | lv| U Subject | | UTL|U tcp.crlf));
utl_smtp.write_数据(lv_conn,“MIME版本:1.0”| | utl_tcp.CRLF);
utl_smtp.write_数据(lv_conn,'Content Type:text/html;charset=KOI8-R;'| | utl_tcp.CRLF);
utl_smtp.write_数据(lv_conn,“内容传输编码:QUOTED-PRINTABLE”| utl_tcp.CRLF);
utl_smtp.write_数据(lv_conn,utl_encode.TEXT_encode(p_body,'CL8KOI8R'));
utl_smtp.write_数据(lv_conn,utl_tcp.crlf);
utl_smtp.close_数据(lv_连接);
utl_smtp.quit(lv_conn);
结束;
两件事的管理方式不同:
create or replace procedure pr_send_mail_by_rawdata(p_subject nvarchar2, p_body nvarchar2) as
lv_server varchar2(255) := 'localhost';
lv_rcpt varchar2(255) := 'you@gmail.com';
lv_from varchar2(255) := 'me <me@gmail.com>';
lv_subject varchar2(4000):= 'cyrillic';
lv_conn utl_smtp.connection;
begin
lv_conn := utl_smtp.open_connection(lv_server);
UTL_SMTP.helo (lv_conn, lv_server);
UTL_SMTP.mail (lv_conn, lv_from);
UTL_SMTP.rcpt (lv_conn, lv_rcpt);
UTL_SMTP.open_data (lv_conn);
UTL_SMTP.WRITE_DATA(lv_conn, 'From' || ': ' || lv_from || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(lv_conn, 'To' || ': ' || lv_rcpt || UTL_TCP.CRLF);
lv_subject := '=?UTF8?Q?'||replace(utl_encode.TEXT_ENCODE(p_subject,'UTF8'),'='||chr(13) || chr(10)) || '?=';
UTL_SMTP.write_raw_data(lv_conn, utl_raw.cast_to_raw('Subject' || ': ' || lv_subject||utl_tcp.crlf ));
utl_smtp.write_data(lv_conn, 'MIME-version: 1.0' || utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, 'Content-Type: text/html; charset=KOI8-R;'||utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, 'Content-Transfer-Encoding: QUOTED-PRINTABLE'||utl_tcp.CRLF);
utl_smtp.write_data(lv_conn, utl_encode.TEXT_ENCODE(p_body,'CL8KOI8R'));
utl_smtp.write_data(lv_conn, utl_tcp.crlf);
utl_smtp.close_data(lv_conn);
utl_smtp.quit(lv_conn);
end;