【问题标题】:How to send email using Oracle Stored Procedure如何使用 Oracle 存储过程发送电子邮件
【发布时间】:2018-03-19 21:34:40
【问题描述】:

我正在创建自动风险评估。 如果发现风险,电子邮件将发送给相关主管。即使在休息日,这项工作也一直在工作。 我已经创建了计算风险的程序并且它正在工作。但是例如如何让它自动将电子邮件发送到特定的电子邮件。 xxx@gmail.com。我找到了一位制作人,但它显示并出现错误: 访问控制列表 (ACL) 拒绝网络访问 这是程序:

  create or replace PROCEDURE     SEND_MAIL (
msg_to varchar2 , 
msg_subject varchar2 ,
msg_text varchar2  )
IS
c utl_smtp.connection;
rc integer; 
msg_from varchar2(50) := 'smsnotfication@gmail.com'; 
mailhost VARCHAR2(30) := '192.168.10.13'; --  technova local database host 

BEGIN
c := utl_smtp.open_connection(mailhost,465); -- SMTP on port 25 
utl_smtp.helo(c, mailhost);
utl_smtp.mail(c, msg_from);
utl_smtp.rcpt(c, msg_to);

utl_smtp.data(c,'From: Oracle Database' || utl_tcp.crlf ||
'To: ' || msg_to || utl_tcp.crlf ||
'Subject: ' || msg_subject || 
utl_tcp.crlf || msg_text);
utl_smtp.quit(c);

EXCEPTION
WHEN UTL_SMTP.INVALID_OPERATION THEN
dbms_output.put_line(' Invalid Operation in Mail attempt 
using UTL_SMTP.');
WHEN UTL_SMTP.TRANSIENT_ERROR THEN
dbms_output.put_line(' Temporary e-mail issue - try again'); 
WHEN UTL_SMTP.PERMANENT_ERROR THEN
dbms_output.put_line(' Permanent Error Encountered.'); 
END;

【问题讨论】:

    标签: oracle11g


    【解决方案1】:

    您似乎没有创建 ACL,是吗?如果没有,这里是我的脚本的摘录 - 看看。

    在分配 ACL 时注意 HOST - 这个可能需要是你提到的 IP 地址。

    我从来没有尝试过你正在做的事情,但是 - 希望 - 它会有所帮助。

    SELECT * FROM dba_network_acls;
    
    -- Drop ACL ====================================================================
    
    BEGIN
       DBMS_NETWORK_ACL_ADMIN.drop_acl (acl => 'myacl.xml');
    END;
    
    -- Create ACL ==================================================================
    
    BEGIN
       DBMS_NETWORK_ACL_ADMIN.create_acl (acl           => 'myacl.xml',
                                          description   => 'SMTP, MAIL, HTTP Access',
                                          principal     => 'SCOTT',
                                          is_grant      => TRUE,
                                          privilege     => 'connect',
                                          start_date    => NULL,
                                          end_date      => NULL);
    END;
    
    -- Assign ACL ==================================================================
    
    BEGIN
       DBMS_NETWORK_ACL_ADMIN.assign_acl (acl          => 'myacl.xml',
                                          HOST         => '*',     --> 192.168.10.13 ?
                                          lower_port   => NULL,
                                          upper_port   => NULL);
    END;
    
    -- Add privilege ===============================================================
    
    BEGIN
       -- SCOTT
       DBMS_NETWORK_ACL_ADMIN.add_privilege (acl          => 'myacl.xml',
                                             principal    => 'SCOTT',
                                             is_grant     => TRUE,
                                             privilege    => 'connect',
                                             start_date   => NULL,
                                             end_date     => NULL);
    
       DBMS_NETWORK_ACL_ADMIN.add_privilege (acl          => 'myacl.xml',
                                             principal    => 'SCOTT',
                                             is_grant     => TRUE,
                                             privilege    => 'resolve',
                                             start_date   => NULL,
                                             end_date     => NULL);
    END;
    /
    COMMIT;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2014-05-07
      • 2014-09-04
      • 2014-12-15
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多