必须使用oracle apex
方法从 APEX_MAIL.SEND()
发送电子邮件。
我正在使用代码:
BEGIN
apex_mail.send(p_to => 'tanmoydawn@gmail.com'/*l_to_addr*/,
p_from => 'tanmoydawn@gmail.com'/*l_from_addr*/,
p_bcc => l_bcc_addr,
p_subj => l_mail_sub,
p_body => 'Service Request ' || :mail_body ||
'Note:- This is a system generated Email. Please DO NOT REPLY to it.');
apex_mail.push_queue;
EXCEPTION
when others then
INSERT INTO send_mail_error_test VALUES ('Send_mail',systimestamp,:service_request_id||'-err:'||seq_service_req_error_id.NEXTVAL);
COMMIT;
END;
***所有变量都包含正确的值
使用数据库,该数据库具有ACL(访问控制列表)访问权限
在apex管理服务中,已配置电子邮件的实例设置,因为主机名,端口,电子邮件配置已启用。
安装了UTL_SMTP包
在同一个流程中,在控制流的同一点,使用utl_Smtp发送邮件的代码工作正常,但apex_mail.send()无效。
apex_mail.send()
没有给出任何错误或异常,但我没有收到来自它的电子邮件。
有一个混乱,得到了类似的解决方案,' APEX_040200
'应该已添加到ACL
。但是我正在使用的数据库并在其上实现代码,比如' apex_user
'已添加到ACL
。即使是现在,我还要添加' APEX_040200
'或者' APEX_050200
'到ACL
?
任何人都可以帮助我并给我一个富有成效的解决方案吗?我使用的是顶点5.0.2.00.07。
答案 0 :(得分:1)
可以在the apex_mail api documentation中找到:
在您从Application Builder应用程序发送电子邮件之前,您 必须:
登录Oracle Application Express管理服务和 在“实例设置”页面上配置电子邮件设置。看到 "配置电子邮件"在“Oracle Application Express管理指南”中。
- 醇>
如果您正在使用Oracle Database 11g运行Oracle Application Express 版本1(11.1),您必须启用出站邮件。在Oracle数据库中 11g版本1(11.1),与网络服务交互的能力是 默认情况下禁用。请参阅"在Oracle数据库中启用网络服务 11克"在Oracle Application Express Application Builder用户指南中。
您指定的实例设置正常。您的数据库具有ALC访问权限"什么都没有意义。你是说你有一个使用网络ACL的数据库? (11克或更高) 该文档链接到"the Enabling Network Services in Oracle Database 11g or Later" documentation
本文档不会让您猜测:
默认情况下,禁用与网络服务交互的功能 在Oracle Database 11g第1版或第2版或更高版本中。因此,如果你是 使用Oracle Database 11g第1版运行Oracle Application Express 或者2或更高版本,您必须使用新的DBMS_NETWORK_ACL_ADMIN包 将连接权限授予 APEX_050000 数据库的任何主机 用户。未授予这些权限会导致以下问题:...
如果您有较旧版本的顶点,例如4.2,则授予的用户是另一个,可以在文档中找到。或者,您可以找到答案
例如,通过查询ALL_USERS
视图并找到APEX_######
用户,选择版本号最高的用户:
select *
from all_users
where username like 'APEX%'
order by username;
答案 1 :(得分:1)
在我们的案例中,这是一份工作ORACLE_APEX_MAIL_QUEUE,其状态为“RUNNING”8天。显然,它在队列或邮件进程上有某种锁定
我们杀了这份工作,就是这样。
(请参阅dba_scheduler_jobs了解作业和状态)
答案 2 :(得分:0)
我猜你应该按照他们的说法here进行操作,但是如你猜测的那样使用正确的APEX版本...尝试使用APEX_050000
(而不是APEX_050200
进行各种操作APEX 5.2 - 尚未发布):
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;
答案 3 :(得分:0)
我有同样的问题。可以使用utl_smtp发送电子邮件,但不能使用apex_mail.send发送电子邮件。原来我的smtp服务器网址中有多余的空间。
用于APEX的电子邮件服务器已在APEX实例工作空间中设置。选中“管理实例”>“实例设置”>“电子邮件”>“ SMTP主机地址”
还尝试在实例工作区中检查“监视器活动”中的日志。