在 oracle apex 中通过电子邮件发送富文本字段

Posted

技术标签:

【中文标题】在 oracle apex 中通过电子邮件发送富文本字段【英文标题】:Emailing rich text field in oracle apex 【发布时间】:2017-08-03 13:23:12 【问题描述】:

目前在表单页面上有一个使用 apex_mail.send 的电子邮件进程,该页面通过电子邮件发送 html 格式的表单内容,一切都很好,直到用户需要能够在表单字段之一中格式化文本,所以我将表单类型从文本区域切换到富文本编辑器。

现在,当通过电子邮件发送表单页面时,该字段现在发送 html 标记而不是格式化文本。我怎样才能使电子邮件在用户输入表单时将该字段格式化发送出去?

有问题的列是实际表中的 vchar2。

这是有问题的代码:

DECLARE
l_id number;
l_index number;
l_vc_arr2    APEX_APPLICATION_GLOBAL.VC_ARR2;
L_BODY   VARCHAR2(32767);
lc_Message    VARCHAR2(4000);

BEGIN

L_BODY   := '<div><span style="text-align: center; font-family: calibri, ariel; font-size: 24px; font-weight: bold; color: #3270d3;">&P65_REQ_PRIORITY. at &P65_CLIENT!HTML. for a &P65_JOB!HTML. Has Been Updated.</span></div>';
L_BODY   := L_BODY ||'<div>&nbsp;';
L_BODY   := L_BODY ||'<table style="height: 60px; width: 710px;">';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 355px; font-family: helvetica, ariel; font-size: 16px;"><strong>Date: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_DATE_WROTE!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 350px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Approved and Ready to Buy: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_READY!HTML. </span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 353px; font-family: helvetica, ariel; font-size: 16px;"><strong>Sales: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_SALES!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 353px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Req Priority: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_REQ_PRIORITY!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'<table style="height: 30px; width: 710px;">';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 353px; font-family: helvetica, ariel; font-size: 16px;"><strong>Client: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_CLIENT!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 353px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Industry: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_CATEGORY!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'<table style="height: 30px; width: 710px;">';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr style="height: 29.2833px;">';
L_BODY   := L_BODY ||'<td style="width: 351px; height: 29.2833px; font-family: helvetica,ariel; font-size: 16px;"><strong>City: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_CITY!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 160.317px; height: 29.2833px; font-family: helvetica,ariel; font-size: 16px;">&nbsp;<strong>State: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_STATE!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 190.683px; height: 29.2833px; font-family: helvetica,ariel; font-size: 16px;">&nbsp;<strong>Zip: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&P65_ZIP!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'<table style="height: 90px;" >';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;"><strong>Working With: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_WORKING_WITH!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Buying Process: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_BUY_PROC!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;"><strong>Position: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_JOB!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Number of Openings: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_DATE_WROTE!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;"><strong>Required Citizenship: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_CIT_STATUS!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 354.5px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Clearance Needed: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_CLEARED!HTML.</span></td>';
L_BODY   := L_BODY ||'<tr>&nbsp;</tr>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'<table style="height: 90px;" >';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Job Description: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_DESCRIPTION!HTML.</html></span></p>';
L_BODY   := L_BODY ||'<p>&nbsp;</p>';
L_BODY   := L_BODY ||'</td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Minimum Qualifications and Desirables: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_MIN_QUALS!HTML.</html><br /></span></p>';
L_BODY   := L_BODY ||'<p>&nbsp;</p>';
L_BODY   := L_BODY ||'</td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Notes: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_NOTES!HTML.</html></span></p>';
L_BODY   := L_BODY ||'<p>&nbsp;</p>';
L_BODY   := L_BODY ||'</td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'<table style="height: 90px; width: 710px;">';
L_BODY   := L_BODY ||'<tbody>';
L_BODY   := L_BODY ||'<tr style="height: 29px;">';
L_BODY   := L_BODY ||'<td style="width: 354.5px; height: 29px; font-family: helvetica, ariel; font-size: 16px;"><strong>Bill Rate: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_RATE!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 353.5px; height: 29px; font-family: helvetica, ariel; font-size: 16px;"><strong>&nbsp;Overtime: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_OT_RATE!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr style="height: 29.9px;">';
L_BODY   := L_BODY ||'<td style="width: 354.5px; height: 29.9px; font-family: helvetica, ariel; font-size: 16px;"><strong>Contract Duration: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_DURATION!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 353.5px; height: 29.9px; font-family: helvetica, ariel; font-size: 16px;">&nbsp;<strong>Hours: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_HOURS!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr style="height: 29px;">';
L_BODY   := L_BODY ||'<td style="width: 354.5px; height: 29px; font-family: helvetica, ariel; font-size: 16px;"><strong>Shift Differential: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_SHIFT_DIFF!HTML.</span></td>';
L_BODY   := L_BODY ||'<td style="width: 353.5px; height: 29px; font-family: helvetica, ariel; font-size: 16px;"><strong>&nbsp;From Tip Written By: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;&P65_TIP_TO_REQ!HTML.</span></td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'</tbody>';
L_BODY   := L_BODY ||'</table>';
L_BODY   := L_BODY ||'</div>';

lc_Message :=               'Date Written   :' || :P65_DATE_WROTE || chr(10);
lc_Message := lc_Message || 'Sales          :' || :P65_SALES|| chr(10);
lc_Message := lc_Message || 'Client         :' || :P65_CLIENT|| chr(10);
lc_Message := lc_Message || 'City           :' || :P65_CITY|| chr(10);
lc_Message := lc_Message || 'State          :' || :P65_STATE|| chr(10);
lc_Message := lc_Message || 'Position       :' || :P65_JOB|| chr(10);
lc_Message := lc_Message || 'Type           :' || :P65_REQ_PRIORITY || chr(10);
lc_Message := lc_Message || 'Rate           :' || :P65_RATE || chr(10);
lc_Message := lc_Message || 'Overtime Rate  :' || :P65_OT_RATE || chr(10);
lc_Message := lc_Message || 'Description    :' || :P65_DESCRIPTION || chr(10);
lc_Message := lc_Message || 'Minimum Qualifications and Desireables         :' || :P65_MIN_QUALS || chr(10);
lc_Message := lc_Message || 'Notes          :' || :P65_NOTES || chr(10);

l_id := APEX_MAIL.SEND( 
p_to => 'generic@email.com', 
p_from => :P65_SALES,
p_subj => ''|| :P65_REQ_PRIORITY || ' at '  || :P65_CLIENT|| ' for a ' || :P65_JOB|| ' in ' || :P65_STATE|| ' Has Been Updated' || chr(10),
p_body_html => L_BODY,
p_body => lc_Message);
FOR c1 IN (SELECT filename, req, mimetype, pkey
FROM REQS
WHERE pkey = :P65_pkey
and REQ IS NOT NULL) loop

APEX_MAIL.ADD_ATTACHMENT(
p_mail_id => l_id,
p_attachment => c1.req,
p_filename => c1.filename,
p_mime_type => c1.mimetype);
END LOOP;

FOR c2 IN (SELECT filename2, exp_res, mimetype2, pkey
FROM REQS
WHERE pkey = :P65_pkey
and EXP_RES IS NOT NULL) loop

APEX_MAIL.ADD_ATTACHMENT(
p_mail_id => l_id,
p_attachment => c2.exp_res,
p_filename => c2.filename2,
p_mime_type => c2.mimetype2);
END LOOP;
COMMIT;
APEX_MAIL.PUSH_QUEUE();
END;

【问题讨论】:

请在您的代码中提及您已将类型从文本区域更改为富文本编辑器的页面项目名称 我很抱歉,它是 P65_MIN_QUALS、P65_NOTES 和 P65_DESCRIPTION 帮助.. :-) 【参考方案1】:

您是否尝试过在每行末尾使用 dbms_lob.append + crlf? 这样您就会收到一封包含所有 HTML 格式的电子邮件。

在此处查看示例代码:

begin l_body := '<div style="margin: 10px"> <h1 style="margin: 0 0 5px 0; padding: 10px; font: bold 18px/32px Arial, sans-serif; color: #EA0000; background-color: #F0F0F0; border-bottom: 2px solid #E6E6E6">'||l_app_name||'</h1> <p style="margin: 15px 0; font: normal 13px/18px Arial, sans-serif;padding: 0 10px">'||crlf; dbms_lob.append(l_body,'<p style="margin: 15px 0; font: normal 13px/18px Arial, sans-serif;padding: 0 10px">'||crlf); dbms_lob.append(l_body,' <table style="width: 100%;" cellspacing="0" cellpadding="0" border="0"> <tr> <th style="background-color: #CCC; color: #333; font: bold 11px/18px Arial, sans-serif; text-align: left; width: 10%; padding: 5px 10px">Event Date</th> </tr>'||crlf); dbms_lob.append(l_body,'</table></div>'||crlf); . . .

【讨论】:

【参考方案2】:

你快到了,不要从富文本项中转义 HTML,因为它不会被渲染。从富文本项的替换字符串中删除 !HTML。这是您的代码的修改版本,从第 61 行到第 71 行,

L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Job Description: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_DESCRIPTION.</html></span></p>';
L_BODY   := L_BODY ||'<p>&nbsp;</p>';
L_BODY   := L_BODY ||'</td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Minimum Qualifications and Desirables: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_MIN_QUALS.</html><br /></span></p>';
L_BODY   := L_BODY ||'<p>&nbsp;</p>';
L_BODY   := L_BODY ||'</td>';
L_BODY   := L_BODY ||'</tr>';
L_BODY   := L_BODY ||'<tr>';
L_BODY   := L_BODY ||'<td style="width: 709px; font-family: helvetica, ariel; font-size: 16px;"><strong>Notes: </strong><span style="font-family: helvetica, ariel; font-size: 16px;">&nbsp;<html>&P65_NOTES.</html></span></p>';

更多信息@Oracle APEX 文档 --> link

【讨论】:

【参考方案3】:

感谢您的意见,但我最终还是以简单的方式解决了问题。

基本上为每个销售字段附加了一个单独的电子邮件流程,然后仅在该字段不为空时才触发。

我知道这不是我确定的认可方式,但它很简单而且很有效。

【讨论】:

以上是关于在 oracle apex 中通过电子邮件发送富文本字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 APEX Oracle 11.2 发送电子邮件的 ACL

触发器共同在oracle apex应用程序中工作

使用 Gmail 在 codeigniter 中通过电子邮件类发送电子邮件

如何在 django 中通过电子邮件发送链接?

EmailBackend 用于在 Django 中通过多个 SMTP 发送电子邮件

在 AWS Lambda 函数中通过 AWS SES 发送电子邮件