Oracle 中利用Procedure 发邮件...
2007-03-26 10:55
141 查看
CREATE OR REPLACE PROCEDURE tnt_send_mail
( p_sender IN VARCHAR2,
p_receiver IN VARCHAR2,
P_subject IN VARCHAR2,
p_message IN VARCHAR2)
AS
mailhost VARCHAR2(100) := '10.100.10.100'; --邮件服务器IP
mail_conn utl_smtp.connection;
PROCEDURE send_header(conn IN OUT NOCOPY utl_smtp.connection,
name IN VARCHAR2,
value IN VARCHAR2) IS
BEGIN
--我服务器端的字符集是ZHS16GBK,使用GB2312才能支持中文
utl_smtp.write_data(conn,name || ': =?GB2312?B?' ||utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.
cast_to_raw(value))) || '?='|| utl_tcp.crlf);
END;
BEGIN
mail_conn :=utl_smtp.open_connection(mailhost);
utl_smtp.helo(mail_conn,mailhost);
utl_smtp.mail(mail_conn,p_sender); -- sender
utl_smtp.rcpt(mail_conn,p_receiver); -- receiver
utl_smtp.open_data(mail_conn);
send_header(mail_conn,'From', p_sender);
send_header(mail_conn,'To', p_receiver);
send_header(mail_conn,'Subject', p_subject); --邮件主题
UTL_SMTP.write_data(mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || Chr(13)|| chr(10));
utl_smtp.write_data(mail_conn, 'MIME-Version: 1.0' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, 'Content-type: text/plain;Charset=UTF8;' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, 'Content-Transfer-Encoding: base64' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, chr(13) || chr(10));
utl_smtp.write_data(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_message))));
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(mail_conn);
raise_application_error(-20000, sqlerrm);
WHEN OTHERS THEN
raise_application_error(-20001,
'The following error has occured: ' || sqlerrm);
End tnt_send_mail;
( p_sender IN VARCHAR2,
p_receiver IN VARCHAR2,
P_subject IN VARCHAR2,
p_message IN VARCHAR2)
AS
mailhost VARCHAR2(100) := '10.100.10.100'; --邮件服务器IP
mail_conn utl_smtp.connection;
PROCEDURE send_header(conn IN OUT NOCOPY utl_smtp.connection,
name IN VARCHAR2,
value IN VARCHAR2) IS
BEGIN
--我服务器端的字符集是ZHS16GBK,使用GB2312才能支持中文
utl_smtp.write_data(conn,name || ': =?GB2312?B?' ||utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.
cast_to_raw(value))) || '?='|| utl_tcp.crlf);
END;
BEGIN
mail_conn :=utl_smtp.open_connection(mailhost);
utl_smtp.helo(mail_conn,mailhost);
utl_smtp.mail(mail_conn,p_sender); -- sender
utl_smtp.rcpt(mail_conn,p_receiver); -- receiver
utl_smtp.open_data(mail_conn);
send_header(mail_conn,'From', p_sender);
send_header(mail_conn,'To', p_receiver);
send_header(mail_conn,'Subject', p_subject); --邮件主题
UTL_SMTP.write_data(mail_conn, 'Date: ' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || Chr(13)|| chr(10));
utl_smtp.write_data(mail_conn, 'MIME-Version: 1.0' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, 'Content-type: text/plain;Charset=UTF8;' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, 'Content-Transfer-Encoding: base64' || chr(13) || chr(10));
utl_smtp.write_data(mail_conn, chr(13) || chr(10));
utl_smtp.write_data(mail_conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(p_message))));
utl_smtp.close_data(mail_conn);
utl_smtp.quit(mail_conn);
EXCEPTION
WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
utl_smtp.quit(mail_conn);
raise_application_error(-20000, sqlerrm);
WHEN OTHERS THEN
raise_application_error(-20001,
'The following error has occured: ' || sqlerrm);
End tnt_send_mail;
相关文章推荐
- Oracle 中利用Procedure 发邮件...
- Oracle Procedure (PL/SQL) 实践归纳(3)之在Java利用Procedure获取结果集
- [Oracle]利用Job和Procedure进行项目自动编号
- 利用Oracle的UTL_SMTP包发邮件设置超送
- oracle 学习笔记 利用RMAN修复数据文件中的坏块
- oracle对于大表利用rowid提升update性能
- Oracle Procedure 返回结果集
- 利用 GROUP BY 和 MAX 实现对表数据分组统计后的过滤查询(Oracle920)
- 利用隐式游标分批删除数据的procedure
- 在oracle利用游标取数据库的结果集应用实例:
- 利用PRM-DUL工具恢复oracle dbf文件中的数据
- 利用替换变量提高Oracle数据库系统的交互性
- Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
- oracle 利用bulk collect into 批量insert
- 如何利用SAP邮箱发邮件
- 利用Sqoop把Oracle数据迁移到HDFS、Hive
- 【转载】如何利用SAP邮箱发邮件
- Oracle中在view,trigger,procedure中跨用户访问表的问题
- Java 并发将oracle表中记录利用JDBC迁移到同结构的另一个表中
- oracle中 procedure(存储过程)和function(函数)本质区别