用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!