我的Oracle数据库目前无法处理邮件与Office 365通信所需的TLS 1.2。因此,我使用一个旧的邮件服务器发送我的邮件,因为它不需要认证,并位于前提。对于内部通信,我需要更改所有" to“地址以更改域,以便将邮件发送到Microsoft,而不是返回到内部邮件服务器。
例句:我需要把所有的电子邮件从user@domain.com改为user@domain.onmicrosoft.com。我是否可以在oracle中修改APEX_MAIL包,以便" to“字段中的domain.com的任何使用都会自动更改为domain.onmicrosoft.com
发布于 2021-09-21 05:52:58
通常情况下,您不会更改专有包--即使可以,它也是错误的。相反,您可以围绕apex_mail包装您自己的pl/sql过程。创建一个具有与您正在使用的apex_mail过程相同签名的包,并在这些过程中调用apex_mail。在打电话给apex_mail之前,做任何你需要的魔术(在你的情况下更改电子邮件附件)。唯一的缺点是您不能在“发送电子邮件”类型的进程中使用它--您必须使用pl/sql。下面是一个过程的示例:
PROCEDURE send (
mail_to_i IN VARCHAR2,
mail_from_i IN VARCHAR2,
mail_reply_to_i IN VARCHAR2,
mail_body_i IN VARCHAR2,
mail_body_html_i IN VARCHAR2 DEFAULT NULL,
mail_subject_i IN VARCHAR2 DEFAULT NULL,
mail_cc_i IN VARCHAR2 DEFAULT NULL,
mail_bcc_i IN VARCHAR2 DEFAULT NULL
)
IS
l_mail_to VARCHAR2(4000) := NULL;
l_mail_cc VARCHAR2(4000) := NULL;
l_mail_bcc VARCHAR2(4000) := NULL;
BEGIN
l_mail_to := REPLACE (LOWER(mail_to_i),'@domain.com','@domain.onmicrosoft.com');
-- do other substitutions if needed
apex_mail.send
(
p_to => l_mail_to,
p_from => mail_from_i,
p_cc => mail_cc_i,
p_subj => mail_subject_i,
p_body => mail_body_i,
p_body_html => mail_body_html_i,
p_replyto => mail_reply_to_i,
p_bcc => mail_bcc_i
);
END send;
发布于 2021-09-20 19:12:42
您不能也不应该修改APEX_MAIL
包。您应该修改调用APEX_MAIL
包的过程,以便在必要时执行任何替换操作,或者只是验证电子邮件地址的输入,这样它们才是您所期望的。
如果您的电子邮件已经添加到apex_mail_queue
中并已错误,则可以更新apex_190200.wwv_flow_mail_queue
(或为您的环境使用适当的APEX模式)以更正MAIL_TO
列中的地址。您还需要重置mail_send_count
和mail_send_error
,以便在下次尝试发送电子邮件时对其进行处理。
UPDATE apex_190200.wwv_flow_mail_queue
SET mail_to = 'some.email@domain.onmicrosoft.com', mail_send_count = 0, mail_send_error = NULL;
https://stackoverflow.com/questions/69259317
复制相似问题