无法使用Oracle 11g APEX5发送电子邮件

时间:2017-03-08 20:17:04

标签: oracle email oracle11g oracle-apex-5

尝试解决使用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。

否 - 打开非安全连接。

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

我还在sqlplus中运行'Granting Connect Privileges'脚本作为sysdba,根据前12c的Oracle指令:

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)发送电子邮件我从未尝试过设置我现在正在使用localhost环境从我自己的PC发送电子邮件,只是在完全配置的工作环境之前完成。任何建议都非常感激。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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;