--代发邮件存储过程源码如下:

CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人
                                      p_subject   VARCHAR2, -- 邮件标题
                                      p_message   VARCHAR2 -- 邮件正文
                                      ) IS

--下面四个变量请根据实际邮件服务器进行赋值
  v_mailhost VARCHAR2(30) := 'smtp.szlongtu.com'; --SMTP服务器地址
  v_user     VARCHAR2(30) := 'wcwen@qq.com'; --登录SMTP服务器的用户名
  v_pass     VARCHAR2(20) := 'XXXXXX'; --登录SMTP服务器的密码
  v_sender   VARCHAR2(50) := 'wcwen@qq.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))));
  --  dbms_output.put_line('...........................');

UTL_SMTP.mail(v_conn, '<' || v_sender || '>'); --设置发件人

UTL_SMTP.rcpt(v_conn, '<' || p_recipient || '>'); --设置收件人

-- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
  v_msg := 'Date:' || TO_CHAR(SYSDATE, 'dd mon yy 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; -- 这个是邮件正文
  dbms_output.put_line(v_msg);
  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;

--配置acl

select * from dba_network_acls;

>创建acl

BEGIN
  DBMS_NETWORK_ACL_ADMIN.create_acl(acl         => 'acl_sendmail_for_icme.xml',
                                    description => 'send mail of the ACL functionality',
                                    principal   => 'SCOTT',
                                    is_grant    => TRUE,
                                    privilege   => 'connect',
                                    start_date  => null,
                                    end_date    => NULL);

COMMIT;
END;
/

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

>添加主机或域名

BEGIN
  DBMS_NETWORK_ACL_ADMIN.assign_acl(acl        => 'acl_sendmail_for_icme.xml',
                                    host       => 'smtp.szlongtu.com',
                                    lower_port => 25,
                                    upper_port => null);
END;
/

DECLARE
  v_mailsever_host VARCHAR2(30) := 'smtp.szlongtu.com';
  v_mailsever_port PLS_INTEGER := 25;
  l_mail_conn      UTL_SMTP.CONNECTION;
BEGIN
  l_mail_conn := UTL_SMTP.OPEN_CONNECTION(v_mailsever_host,
                                          v_mailsever_port);
END;
/

select DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE('acl_sendmail_for_icme.xml','SCOTT','connect') from dual;

grant execute on send_mail to scott;

select DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE('acl_sendmail_for_icme.xml','SYS','connect') from dual;

>授权用户

BEGIN
  dbms_network_acl_admin.add_privilege(acl        => 'acl_sendmail_for_icme.xml',
                                       principal  => 'SYS',
                                       is_grant   => TRUE,
                                       privilege  => 'connect',
                                       start_date => SYSTIMESTAMP,
                                       end_date   => NULL);
  COMMIT;
END;
/

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;

--清空acl信息

BEGIN
  DBMS_NETWORK_ACL_ADMIN.drop_acl(acl => 'acl_sendmail_for_icme.xml');
end;

Oracle管理监控之使用utl_mail自动邮件报警配置的更多相关文章

  1. 监测mysql错误日志,有错误自动邮件报警

    监测mysql错误日志,有错误自动邮件报警 http://blog.csdn.net/yabingshi_tech/article/details/51443401 MySQL:监控慢日志.错误日志. ...

  2. 【集群监控】Prometheus+AlertManager实现邮件报警

    AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 Prometheus下载配置参考我的另一篇: htt ...

  3. Zabbix邮件报警配置

    一.安装sendmail或者postfix yum install sendmail #安装 service sendmail start #启动 chkconfig sendmail on #设置开 ...

  4. zabbix(7)邮件报警配置

    邮件报警可以使用Linux自带邮件服务器(postfix等),也可以使用其他邮件服务器(像腾讯邮箱,126邮箱) 一.使用mail. 1.确定zabbix server是否安装发送邮件的命令mail, ...

  5. zabbix 邮件报警配置

    zabbxi 邮件告警推送有两种方式: 1.使用zabbix服务端的本地邮箱账号发送,邮件名为:user@hostname.localdomain,user为发送邮件的用户,hostname为zabb ...

  6. Oracle管理监控之检查数据库和日常维护数据库

    linux系统的系统日志一般位于/var/log目录下.linux的系统日志由一个叫syslog的进程管理的,如下日志都是由syslog服务驱动的. /var/log/ messages:记录linu ...

  7. Oracle管理监控之如何对数据库进行监控检查

    oracle自动工作负载库(AWR):采集与性能相关的统计数据,并从统计的数据中导出性能量度,以跟踪数据库潜在的问题. 如何生成oracle数据库的自动负载库报告. 手工生成一份oracle数据库的快 ...

  8. Oracle管理监控之Oracle用户权限

    数据字典 1.动态数据字典是以v$xxx开始的数据字典,在数据库中约有150个左右,这些数据字典反映数据库动态运行状况,在不同时间查询会得到不同的结果. 2.DBA数据字典是以DBA_xxx表示,该数 ...

  9. Oracle管理监控之sqlplus实现上下翻页设置

    环境: 操作系统:red hat 5.8 OS 数据库:oracle 11g 11.2.0.1 安装软件:IO-Tty-1.07.tar. Term-ReadLine-Gnu-1.16.tar.uni ...

随机推荐

  1. C++ 程序可以定义为对象的集合

    C++ 基本语法C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互.现在让我们简要地看一下什么是类.对象,方法.即时变量. 对象 - 对象具有状态和行为.例如:一只狗的状态 - 颜色 ...

  2. 【Java面试题】53 能不能自己写个类,也叫java.lang.String?

    可以,但是即使你写了这个类,也没有用. 这个问题涉及到加载器的委托机制,在类加载器的结构图(在下面)中,BootStrap是顶层父类,ExtClassLoader是BootStrap类的子类,ExtC ...

  3. c++ double float 数值比较

    浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数.具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基 ...

  4. Python学习笔记(三)——迭代

    知识点 迭代 迭代 什么是迭代呢?和递归又有什么区别呢? 根据维基百科和网上的资料: 迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”, ...

  5. 再不学会这些技巧,你就OUT了!

    俗话说的好:技多不压身!这句话真是一点都没错,尤其是在21世纪的今天,作为老师的你,如果不会使用下面所要说的这款神器,恐怕你就像玩游戏一样,要被get out!那到底是什么呢?它就是现在正在全国初高中 ...

  6. 如何使用ChemDraw绘制自由基符号

    ChemDraw软件是一款全球领先的化学绘图工具,能够绘制各种复杂的化学符号和化学结构图形.ChemDraw汉化版结合了中国用户的使用习惯,可以帮助国内化学行业工作者更加轻松快捷地绘制化学图形.本教程 ...

  7. 怎么输入MathType不等号

    MathType是一款比较常用的数学公式编辑器,我们在使用这款软件的时候常常需要输入各种符号.有些新用户对这款软件不是很熟悉,对于一些符号不知道怎么输入,下面我们来给大家介绍介绍MathType不等号 ...

  8. Java精选笔记_DBUtils工具

    DBUtils工具 API介绍 为了更加简单地使用JDBC,Apache组织提供了一个工具类库commons-dbutils组件. 该组件实现了对JDBC的简单封装,可以在不影响性能的情况下极大简化J ...

  9. ping命令和telnet命令

    1.检查能不能连接上远程主机 ping  主机ip 2.检查远程主机端口是不是开放 telnet 198.10.10.69 1521 Trying 198.10.10.69...Connected t ...

  10. LeetCode——Delete Node in a Linked List

    Description: Write a function to delete a node (except the tail) in a singly linked list, given only ...