【发布时间】:2019-01-22 00:37:53
【问题描述】:
我已经完成了所有活动,即下面提到的,请告诉我缺少哪个步骤/活动。
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'apex_user.xml',
description => 'access to apex email',
principal => 'DBUSER',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date =>Null
);
COMMIT;
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'apex_user.xml',
principal => 'DBUSER',
is_grant => true,
privilege => 'resolve'
);
COMMIT;
END;
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'apex_user.xml',
host => 'smtp.gmail.com',
lower_port =>587,
upper_port =>587
);
COMMIT;
END;
为了确保用户可以访问 smtp 包,请以 SYS 身份运行
GRANT EXECUTE ON UTL_TCP TO DBUSER;
GRANT EXECUTE ON UTL_SMTP TO DBUSER;
GRANT EXECUTE ON UTL_MAIL TO DBUSER;
GRANT EXECUTE ON UTL_http TO DBUSER;
启用 UTL_MAIL
alter system set smtp_out_server = 'smtp.gmail.com:587' scope = both;
一旦我在 Oracle 中执行以下查询,因为 firstname.lastname@gmail.com 的应用程序安全性较低,因为来自 google 帐户
begin
utl_mail.send(
sender => 'fistname.lastname@gmail.com',
recipients => 'fistname.lastname@gmail.com',
message => 'Hello World'
);
end;
错误报告 - ORA-29279: SMTP 永久错误: 530 5.7.0 必须先发出 STARTTLS 命令
一旦从 apex 调用,就会报错
APEX_MAIL.SEND(
p_to => 'fistname.lastname@gmail.com',
p_from => 'fistname.lastname@gmail.com',
p_subj => 'APEX_MAIL with attachment',
p_body => 'Please review the attachment.',
p_body_html => '<b>Please</b> review the attachment');
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
但是我尝试使用 utl_smtp 并再次出现同样的错误
create or replace PROCEDURE send_email(p_to IN VARCHAR2,
p_from IN VARCHAR2,
p_message IN VARCHAR2,
p_smtp_host IN VARCHAR2,
p_smtp_port IN NUMBER DEFAULT 587)
AS
l_mail_conn UTL_SMTP.connection;
BEGIN
l_mail_conn := UTL_SMTP.open_connection(p_smtp_host, p_smtp_port);
UTL_SMTP.helo(l_mail_conn, p_smtp_host);
UTL_SMTP.mail(l_mail_conn, p_from);
UTL_SMTP.rcpt(l_mail_conn, p_to);
UTL_SMTP.data(l_mail_conn, p_message || UTL_TCP.crlf || UTL_TCP.crlf);
UTL_SMTP.quit(l_mail_conn);
END;
ORA-29279:SMTP 永久错误:530 5.7.0 必须首先发出 STARTTLS 命令。 c13sm6735648wrb.38 - gsmtp
请告诉哪个命令或任何错误..
【问题讨论】:
-
如果您只是使用 utl_mail 或 apex_mail,则不需要 utl_tcp 或 utl_smtp 的授权。
-
您的问题是 utl_mail 和 apex_mail 不支持 TLS,因此这不能直接与需要它的谷歌邮件服务器一起使用。如果您在 Google 上搜索“utl_smtp ssl”可能会描述一些选项,但它们需要使用 utl_smtp,例如oracle.ninja/…
-
您选择使用 gmail 作为邮件网关有什么原因吗?
标签: oracle oracle11g oracle-apex ora-24247