1、创建发送邮件的存储过程

CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人
p_subject VARCHAR2, -- 邮件标题
p_message VARCHAR2 -- 邮件正文
) IS
--下面四个变量请根据实际邮件服务器进行赋值
v_mailhost VARCHAR2(30) := '123.125.50.135'; --SMTP服务器地址
v_user VARCHAR2(30) := '******'; --登录SMTP服务器的用户名
v_pass VARCHAR2(20) := '******'; --登录SMTP服务器的密码
v_sender VARCHAR2(50) := '******@163.com'; --发送者邮箱,一般与 ps_user 对应
v_conn UTL_SMTP.connection; --到邮件服务器的连接
v_msg varchar2(4000); --邮件内容
BEGIN
v_conn := UTL_SMTP.open_connection(v_mailhost, 25);
UTL_SMTP.ehlo(v_conn, v_mailhost); --是用 ehlo() 而不是 helo() 函数
--否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.
UTL_SMTP.command(v_conn, 'AUTH LOGIN'); -- smtp服务器登录校验
UTL_SMTP.command(v_conn,
UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
UTL_SMTP.command(v_conn,
UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
UTL_SMTP.mail(v_conn, '<' || v_sender || '>'); --设置发件人
UTL_SMTP.rcpt(v_conn, '<' || p_recipient || '>'); --设置收件人
-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
v_msg := 'Date:' || TO_CHAR(SYSDATE, 'yyyy mm dd hh24:mi:ss') ||
UTL_TCP.CRLF || 'From: ' || v_sender || '' || UTL_TCP.CRLF ||
'To: ' || p_recipient || '' || UTL_TCP.CRLF || 'Subject: ' ||
p_subject || UTL_TCP.CRLF || UTL_TCP.CRLF -- 这前面是报头信息
|| p_message; -- 这个是邮件正文
UTL_SMTP.open_data(v_conn); --打开流
UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg)); --这样写标题和内容都能用中文
UTL_SMTP.close_data(v_conn); --关闭流
UTL_SMTP.quit(v_conn); --关闭连接
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
END send_mail;

2、创建完存储过程需要配置额外的权限(创建的步骤不能错)

begin

dbms_network_acl_admin.create_acl (

acl             => 'sendmail.xml', ---创建的访问控制列表名字

description     => 'Normal Access',

principal       => 'CONNECT',

is_grant        => TRUE,

privilege       => 'connect',

start_date      => null,

end_date        => null

);

end;

----------------------------------------------------------------

begin

dbms_network_acl_admin.add_privilege(acl        => 'sendmail.xml',

principal  => 'ABS_20160104',

is_grant   => TRUE,

privilege  => 'connect',

start_date => null,

end_date   => null);

end;

----------------------------------------------------------------

begin

dbms_network_acl_admin.assign_acl (

acl => 'utlpkg.xml',

host => '123.125.50.135', --可访问服务器的地址

lower_port => 25,  ---最低端口

upper_port => 25); --最高端口

end;

----------------------------------------------------------------

--删除权限文件

BEGIN

DBMS_NETWORK_ACL_ADMIN.drop_acl(acl => 'sendmail.xml');

COMMIT;

END;

--查询全限文件

SELECT *  FROM resource_view WHERE any_path like '/sys/acls/%.xml';

--查询文件网络权限

SELECT host, lower_port, upper_port, acl FROM dba_network_acls;

--查询用户的网络权限

SELECT acl,

principal,

privilege,

is_grant,

TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,

TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date

FROM dba_network_acl_privileges;

现在可以调用存储过程发送邮件。

oracle发送邮件的更多相关文章

  1. Oracle发送邮件,支持HTML,多收件人,多附件

    Oracle发邮件,权限问题 - 创建 ACL BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'email_server_permissions. ...

  2. 利用Oracle 发送邮件(utl_smtp)

    发送邮件的方法有很多,.NET前台也可以通过创建邮件类的形式, 通过微软提供的System.Net.Mail.dll 也可以简单的发送邮件.但是代码比较长,操作起来虽然很简单(很多细节忽略了). 这里 ...

  3. Oracle 存储过程发送邮件

    CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT       VARCHAR2,                                      ...

  4. oracle 存储过程发邮件

    CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT       VARCHAR2,                                      ...

  5. Oracle存储过程返回游标实例详解

    复制代码 代码如下:CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR ...

  6. Oracle邮件推送函数

    CREATE OR REPLACE PROCEDURE PROCSENDEMAIL ( P_TXT VARCHAR2, P_SUB VARCHAR2, P_SENDOR VARCHAR2, P_REC ...

  7. [Python]查询oracle导出结果至Excel并发送邮件

    环境:Linux +python2.7+oracle11g 1.提前安装xlwt(excel写入操作模块),cx_Oracle(oracle操作模块) cx_Oracle的安装步骤详见链接:https ...

  8. Linux如何用脚本监控Oracle发送警告日志ORA-报错发送邮件

    Linux如何用脚本监控Oracle发送警告日志ORA-报错发送邮件 前言 公司有购买的监控软件北塔系统监控,由于购买的版权中只包含了有限台数据库服务器的监控,所以只监控了比较重要的几台服务器. 后边 ...

  9. Oracle APEX 发送邮件

    1.网络服务安全设置 Oracle 11gR2的版本,可能导致邮件发送失败(ORA-24247: network access denied by access control list (ACL)) ...

随机推荐

  1. iframe式ajax调用示例

    1.新建 a.html <!doctype html> <html> <head> <meta charset='utf-8'> <title&g ...

  2. HDU 4757 Tree 可持久化字典树

    Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4757 Des ...

  3. cocos2dx动画Animation介绍

     一.帧动画 你能够通过一系列图片文件,像例如以下这样,创建一个动画: [cpp]   CCAnimation *animation = CCAnimation::create();   //从本 ...

  4. TP复习12

    四.特殊标签 1.比较标签 eq或者 equal 等于 neq 或者notequal 不等于 gt 大于 egt 大于等于 lt 小于 elt 小于等于 heq 恒等于 nheq 不恒等于 2.范围标 ...

  5. [Angular2 Router] CanActivate Route Guard - An Example of An Asynchronous Route Guard

    In this tutorial we are going to learn how we can to configure an can activate route guard in the An ...

  6. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  7. MHA参数 转

    http://blog.csdn.net/wulantian/article/details/12503473 http://blog.csdn.net/wulantian/article/categ ...

  8. C++编程练习(14)-------“单例模式”的实现

    原文:http://blog.csdn.net/oohaha_123/article/details/25190833 单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例 ...

  9. 数据分析之sql篇

    刚才在琢磨客户分析的时候,突然想到一个假设,如果某个客户的续约率很高,那么证明他在产品的使用上效果是很好的,如果这些些产品的组合十分有效,那么查看其他类似的客户的续约率,做一次论证应该是有意义的.于是 ...

  10. 聊聊 Xcode 项目文件中的 project.pbxproj

    project.pbxproj 文件被包含于 Xcode 工程文件 *.xcodeproj 之中,存储着 Xcode 工程的各项配置参数.它本质上是一种旧风格的 Property List 文件,历史 ...