用utl_smtp发送邮件时的汉字解决方法

博客介绍了在Oracle中使用utl_smtp发送邮件的方法,指出汉字显示应用write_raw_data(),给出了详细的存储过程示例,替换相应服务器和邮件地址即可运行,还提到无需考虑NLS_LANG设置,有问题可保持服务器与客户端设置一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


用utl_smtp发送邮件,汉字的显示应该用write_raw_data();
根据Oracle网站的相关说明,示例如下:

CREATE OR REPLACE PROCEDURE sende
AS
    --mailhost  varchar2(30) := 'smtp-server.some-company.com';
    mailhost    varchar2(30) := '10.155.*.*';
   --最好用邮件服务器的IP地址 
   sender      varchar2(30) := 'me@some-company.com';
    recipient   varchar2(30) := 'someone@some-company.com';
    conn        utl_smtp.connection;
    mesghead    varchar2(500) ;
    mesgbody    varchar2(2000) ;

BEGIN
    conn := utl_smtp.open_connection(mailhost, 25);
    utl_smtp.helo(conn, mailhost);
    utl_smtp.mail(conn, sender);
    utl_smtp.rcpt(conn, recipient);
    utl_smtp.open_data(conn);
    mesghead:=
       'Date:' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || utl_tcp.CRLF ||
       'From:' || sender || utl_tcp.CRLF ||
       'Subject: Sending Mail From Budget Forewarn System' || utl_tcp.CRLF ||
       'To: '|| recipient || utl_tcp.CRLF ||
        utl_tcp.CRLF||''||utl_tcp.CRLF;
    utl_smtp.write_data(conn,mesghead);
    mesgbody:=
     '电脑部预算预警指标(一月份):' || utl_tcp.CRLF||
     '   1、预算执行率:,' ||utl_tcp.CRLF||
     '   2、分科目预算执行情况:'||utl_tcp.CRLF||
     ''||utl_tcp.CRLF||
     '                 此邮件为系统自动发送,勿需回复!'||utl_tcp.CRLF ; 

    utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(mesgbody));
    utl_smtp.close_data(conn);
    utl_smtp.quit(conn);
    --EXCEPTION
        --WHEN OTHERS THEN
           -- Handle the error
END;
/

        上例中用相应的服务器地址和邮件地址替换后就可以运行,不需要考虑NLS_LANG的设置,
如果有问题,请保持Oracle服务器NLS_LANG设置与客户端一致。

         Good luck!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值