0

APEX 版本:4.1.1

Example:

http://apex.oracle.com/pls/apex/f?p=27554:53

User name: demo
PW: demo

我正在使用以下博客 ( http://spendolini.blogspot.com/2006/04/custom-export-to-csv.html ) 创建一个 .CSV 文件,但是如何将该 .CSV 文件添加为附件到在 APEX 中创建/生成的电子邮件?我想要一个创建 .CSV 文件的页面进程,将该 .CSV 文件添加到 APEX 生成的电子邮件中,并在单击 APEX 页面上的按钮时发送该电子邮件。

我还使用以下Oracle 文档作为指导。

单击“应用更新”按钮时的当前页面处理代码:(当代码运行时,会创建 .CSV 文件并发送电子邮件,但电子邮件不包含 .CSV 文件作为附件)

declare
  l_body_html varchar2(4000);
  l_subj varchar2(200);
  l_from varchar2(200);
  l_cc_address varchar2(2000);
  l_cc varchar2(500);
  l_id NUMBER;

begin

         l_subj := '***TEST - DQ MANUAL EDIT - Daily Field Report - ***TEST';

l_body_html := '<html>
<head>
<style type="text/css">
body{font-family: Calibri, Arial, Helvetica, sans-serif;
font-size:11pt;
margin:30px;
color:#1F497D;
background-color:#ffffff;}

</style>
</head>
<body>';

       l_body_html := l_body_html || '<body><div><p><span style="font-size:12.0pt;font-family:Calibri,sans-serif;color:#1F497D;font-weight:bold;">Attached is the manual edit report for today.</b>';

    l_body_html := l_body_html;

   l_body_html := l_body_html;

   l_body_html := l_body_html || '<p>' || ' will contact you in the near future to prioritize the request and discuss an estimated completion date. Please note that many requests are received daily and it can take several days to couple of weeks on some requests.  If this request is of a high critical nature, please feel free to contact directly or reply to this email.</p>';

 l_body_html := l_body_html || '</div></body></html>';


begin
-- Set the MIME type
owa_util.mime_header( 'application/octet', FALSE );
-- Set the name of the file
htp.p('Content-Disposition: attachment; filename="Manual_Edit_Selected_Records.csv"');
-- Close the HTTP Header
owa_util.http_header_close;
-- Loop through all rows in EMP
htp.prn('Data Fields,Grouping,Channel,Month,Year,Edits' || chr(13));
for x in (select 
dq_attribute,
dq_grouping, 
case 
when DQ_CHANNEL = 'Retail' then 'Retail/CD'
when DQ_CHANNEL = 'Consumer Direct' then 'Retail/CD'
else DQ_CHANNEL 
end as dq_channel,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'Month') as Month,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'YYYY') as Year,
case when count(reason_for_change)=0 then 'N/A' else to_char(count(reason_for_change)) end  as Edits
from DQ_MANUAL_EDIT
where
decode(NVL(:P50_DQ_ANALYST, 'ALL'), 'ALL','ALL',DQ_ANALYST) = NVL(:P50_DQ_ANALYST, 'ALL')
and decode(NVL(:P50_DQ_FIELD, 'ALL'), 'ALL','ALL',DQ_ATTRIBUTE) = NVL(:P50_DQ_FIELD, 'ALL')
and decode(NVL(:P50_DQ_CHANNEL, 'ALL'), 'ALL','ALL',DQ_CHANNEL) = NVL(:P50_DQ_CHANNEL, 'ALL')
and decode(NVL(:P50_DQ_GROUPING, 'ALL'), 'ALL','ALL',DQ_GROUPING) = NVL(:P50_DQ_GROUPING, 'ALL')
and decode(NVL(:P50_DQ_IMS, 'ALL'), 'ALL','ALL',DQ_IMS_NUM) = NVL(:P50_DQ_IMS, 'ALL')
and NVL(to_char(to_date(:P50_EDIT_DATE_FROM,'MM/DD/YYYY'),'MM/DD/YYYY'), to_date(sysdate,'MM/DD/YYYY')) <= trunc(INSERT_DATE)
and NVL(to_char(to_date(:P50_EDIT_DATE_TO, 'MM/DD/YYYY'),'MM/DD/YYYY'), to_date(sysdate-28,'MM/DD/YYYY')) >= trunc(INSERT_DATE)
Group by 
dq_attribute, 
INSERT_DATE,
dq_grouping, 
dq_channel
order by to_char(to_date(INSERT_DATE,'yyyy-mm'),'YYYY') desc,
to_char(to_date(INSERT_DATE,'yyyy-mm'),'mm'), dq_attribute asc
)
loop
 -- Print out a portion of a row,
 -- separated by commas and ended by a CR
 htp.prn(
'"' ||x.dq_attribute||'","'|| 
x.dq_grouping ||'","'||  
x.dq_channel ||'","'||  
x.Month ||'","'||
x.Year ||'","'||  
x.Edits || '"' || chr(13));
end loop;
-- Send an error code so that the
-- rest of the HTML does not render
htmldb_application.g_unrecoverable_error := true;
end;



  l_id := APEX_MAIL.SEND(
    --P_TO        => :P53_EMAIL_TO,
    P_TO        => 'first_name.last_name@company.com',
    P_FROM      => 'IT.DEPT@company.com',
    P_BODY      => l_body_html,
    P_BODY_HTML => l_body_html,
    P_SUBJ      => l_subj);

      FOR c1 IN (SELECT filename, blob_content, mime_type 
        FROM APEX_APPLICATION_FILES
        WHERE ID IN (123,456)) LOOP

        APEX_MAIL.ADD_ATTACHMENT(
            p_mail_id    => l_id,
            p_attachment => c1.blob_content,
            p_filename   => c1.filename,
            p_mime_type  => c1.mime_type);
        END LOOP;
    COMMIT;


    wwv_flow_mail.push_queue(
   P_SMTP_HOSTNAME => 'mailhost.company.net',
   P_SMTP_PORTNO => '31'
   );
end;
4

1 回答 1

0

在 Oracle 论坛上找到了与此主题相关的有用讨论,这将有助于回答您的问题:https ://forums.oracle.com/forums/thread.jspa?threadID=989396

讨论的是电子邮件的附件不是与电子邮件本身分开的物理文件,当您首先创建物理文件然后起草电子邮件以发送它时,这可能是您的问题。当我们使用网络邮件客户端或电子邮件软件应用程序发送电子邮件时,它不会像我们看到的那样起作用。请参阅 Bill Verreyne 对utl_mail包如何工作的说明,该说明显示了如何通过修改电子邮件的 MIME-BODY 来添加附件。

简而言之,这个概念是将您的数据放在电子邮件本身的正文中,但要确定应该由适当的 mime 标头视为“附件”的部分。UTL_MAIL看起来是最简单的管理方法,尽管您可能需要耐心和反复试验来手工制作一些简单的标头,或者对APEX_MAIL包进行进一步试验。

我复制了最重要的部分,这是带有“附件”的示例电子邮件正文的样子……请注意,电子邮件中根本没有物理文件。它从头到尾读起来就像一封电子邮件:

From: noreply@oracle-server.domain
To: scott@tiger.com
Subject: =?ISO-8859-1?Q?Sample=20Mail=20from=20UTL=5FMAIL?=
X-Priority: 3
Content-Type: multipart/mixed; boundary="------------4D8C24=_23F7E4A13B2357B3"
Return-Path: noreply@oracle-server.domain
Date: 19 Nov 2009 07:45:15 +0200
Mime-Version: 1.0

This is a multi-part message in MIME format.
--------------4D8C24=_23F7E4A13B2357B3
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

This is the e-mail message part that the mail reader will display.


--------------4D8C24=_23F7E4A13B2357B3
Content-Type: text/csv; name="sample.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline; filename="sample.csv"

col1,col2,col3
col1,col2,col3
col1,col2,col3
--------------4D8C24=_23F7E4A13B2357B3--
于 2012-12-04T01:20:42.280 回答