【问题标题】:cannot send emails with Oracle 11g APEX5无法使用 Oracle 11g APEX5 发送电子邮件
【发布时间】:2017-07-29 14:22:00
【问题描述】:

尝试解决使用 Oracle APEX5 11g 发送电子邮件的问题。我已经按照 Oracle 说明设置了管理设置:


SMTP 主机地址 - 定义 SMTP 服务器的服务器地址。安装时默认设置为 localhost。如果您使用另一台服务器作为 SMTP 中继,请将此参数更改为该服务器的地址。

SMTP 主机端口 - 定义 SMTP 服务器侦听邮件请求的端口。默认设置为 25。

SMTP 身份验证用户名 - 如果您输入用户名,Oracle Application Express 将在发送电子邮件时对其进行身份验证。在 Oracle Database 11g 第 2 版 (11.2.0.2) 之前,仅支持 SMTP 身份验证方案“LOGIN”。在较新的数据库版本上,支持 UTL_SMTP 的所有身份验证方案。

SMTP 身份验证密码 - 如果您输入密码,Oracle Application Express 在发送电子邮件时会根据该密码进行身份验证。在 Oracle Database 11g 第 2 版、第 11.2.0.2 版之前,仅支持 SMTP 身份验证方案“LOGIN”。在较新的数据库版本上,支持 UTL_SMTP 的所有身份验证方案。

使用 SSL/TLS - 从 Oracle Database 11g 第 2 版 (11.2.0.2) 开始,Oracle Application Express 支持安全 SMTP 连接。选项包括:

是 - 在 SMTP 通信之前建立与 SSL/TLS 的安全连接。

连接建立后 - Oracle Application Express 在连接打开后立即发送 SMTP 命令 STARTTLS。

否 - 打开非安全连接。

默认电子邮件发件人地址 - 定义生成电子邮件的任务的发件人地址,例如批准供应请求或重置密码。


我还按照 12c 之前的 Oracle 指令在 sqlplus 作为 sysdba 中运行了“授予连接权限”脚本:


DECLARE
  ACL_PATH  VARCHAR2(4000);
BEGIN
  -- Look for the ACL currently assigned to '*' and give APEX_050000
  -- the "connect" privilege if APEX_050000 does not have the privilege yet.

  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_050000',
     'connect') IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
     'APEX_050000', TRUE, 'connect');
  END IF;

EXCEPTION
  -- When no ACL has been assigned to '*'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
    'ACL that lets power users to connect to everywhere',
    'APEX_050000', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;

在添加任何包、过程等方面,我需要在应用程序中进行更多配置吗??

每当我尝试使用 APEX 发送电子邮件程序或运行标准 APEX_MAIL.SEND PL/SQL 代码时,我都无法让我的应用程序从我的 SMTP 服务器(Gmail 或 BT Internet)发送电子邮件,我从未尝试过设置就像我现在所做的那样,使用本地主机环境从我自己的 PC 上发送电子邮件,之前只是从一个已配置好的工作环境中完成它。非常感谢任何建议。

【问题讨论】:

标签: oracle email oracle11g oracle-apex-5


【解决方案1】:

首先创建 ACL 并将其分配给您的用户 APEX_050000。

第二点,您需要确保连接使用的是 SSL 证书,如果是,则必须创建一个钱包并安装相应的证书 (.crt) 以从外部 smtp 发送电子邮件。在这里您将找到详细信息:

https://oracle-base.com/articles/misc/oracle-application-express-apex-ldap-authentication

【讨论】:

    【解决方案2】:
    declare
    
        v_user_name varchar2(100);
        v_password varchar2(100);
    
    begin
    
        select USERNAME,PASSWORD into v_user_name,v_password from tbl_us where upper(email) = upper(EMAIL); APEX_MAIL.SEND(
        p_to                        =>lower(your_email),
        p_from                      =>'admin@abc.com',
        p_body                      =>null,
        p_subj                      =>'Password for Customer Login',
        p_cc                        => NULL,
        p_bcc                       =>NULL,
        p_replyto                   =>null);
    
        APEX_MAIL.PUSH_QUEUE;
    end;
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2017-12-21
      • 2015-06-11
      • 2015-09-06
      • 2021-04-13
      • 2021-09-12
      • 2013-03-30
      • 2017-02-15
      相关资源
      最近更新 更多