0

我有以下代码,我的任务是将'eFrom'值从更改'anonymous''no-response'。我不知道值存储在哪里或如何找到它。现在,该过程发送一封电子邮件,其发件人值为'anonymous@mail.com'。有谁知道我如何找到它的值'eFrom'或它存储在哪个表中?我目前正在使用 Oracle SQL Developer。

create or replace PROCEDURE SEND_MAIL
(eTo IN VARCHAR2,
 eFrom IN VARCHAR2,
 eCC IN varchar2,
 eSubject IN VARCHAR2,
 eMessage IN CLOB) AS
BEGIN
  execute immediate 'alter session set smtp_out_server = ' || chr(39) || 'mail.com' || chr(39);
  UTL_MAIL.send(sender => eFrom,
  recipients => eTo,
  cc => eCC,
  subject => eSubject,
  message => eMessage,
  mime_type => 'text/html; charset=utf-8');
END;  
4

2 回答 2

2

eFrom不存储在任何地方(至少不在您发布的代码中)。它是传递给此过程的参数。您需要查看调用此过程的任何代码,以查看该代码从何处获取eFrom值(当然,可能有多个地方调用此过程,每个地方都从不同的地方获取值)。这些地方可能是其他 PL/SQL 块(在这种情况下,您可以使用dba_dependencies它们来追踪它们。但它们也可能在数据库外部运行的代码中,在这种情况下,您需要深入研究该源。

如果您正在寻找调用您的SEND_MAIL过程的其他存储的 PL/SQL 对象

SELECT owner, name, type
  FROM dba_dependencies
 WHERE referenced_name = 'SEND_MAIL'
   AND referenced_owner = <<owner of procedure>>

如果您无权访问dba_dependencies,则可以使用all_dependenciesuser_dependencies假设您对调用过程具有特权或拥有它。

当然,您可以修改过程以简单地覆盖eFrom传入的值并传递硬编码no-response@domain.com,但这似乎不太可能是正确的。您还可以修改代码以eFrom仅在传入的值是anonymous@domain.com但同样不太可能是最佳方法时覆盖该值。

于 2013-09-20T15:07:54.900 回答
0

在我看来,收件人、发件人、抄送、主题和消息作为参数传递到存储的过程中。您无法通过查看存储的过程来判断这些值是什么;你必须去调用它的代码看看它传递了什么。

您可能必须更新该表才能更改 eFrom 地址。

于 2013-09-20T15:07:19.787 回答