如何使用cfscript而不是cfmail构建复杂的电子邮件-模板以及保存在变量中的内容?

时间:2019-06-05 19:07:55

标签: coldfusion cfml

这在我之前提出的问题上有所扩展。服务器是CF2016。我正在使用savecontent保存数据表:

savecontent variable = 'mailBody' {
   writeOutput('
    <table width="99%" style="border-collapse:collapse;width:99%;">
      <tr>
        <td style="background-color:##09AFFF;color:##FFFFFF;width:30%;padding-left:3px;padding-top:5px;padding-bottom:5px;font-size:12px;font-weight:700;border-bottom:1px solid ##5B5B5B;text-align:left;">Name</td>
        <td style="background-color:##09AFFF;color:##FFFFFF;width:15%;padding-top:5px;padding-bottom:5px;font-size:12px;font-weight:700;border-bottom:1px solid ##5B5B5B;text-align:center;">Class</td>
        <td style="background-color:##09AFFF;color:##FFFFFF;width:30%;padding-top:5px;padding-bottom:5px;font-size:12px;text-align:left;font-weight:700;border-bottom:1px solid ##5B5B5B;">City,State,ZIP</td>
        <td style="background-color:##09AFFF;color:##FFFFFF;width:15%;padding-right:5px;padding-top:5px;padding-bottom:5px;font-size:12px;text-align:left;font-weight:700;border-bottom:1px solid ##5B5B5B;">Amount</td>
      </tr>
  ');

   for ( qryPeople in queryPeople ){
       writeOutput('
      <tr>
        <td style="font-size:12px;padding-left:3px;padding-top:3px;padding-bottom:4px;background-color:#thisBgColor#;border-bottom:1px solid ##5B5B5B;">#qryPeople.p_first# #qryPeople.p_last#</td>
        <td style="font-size:12px;padding-left:3px;padding-top:3px;padding-bottom:4px;background-color:#thisBgColor#;border-bottom:1px solid ##5B5B5B;text-align:center;">#YEAR(qryPeople.p_graduation)#</td>
        <td style="font-size:12px;padding-left:3px;padding-top:3px;padding-bottom:4px;background-color:#thisBgColor#;border-bottom:1px solid ##5B5B5B;">#qryPeople.p_city# #qryPeople.p_state#</td>
        <td style="font-size:12px;padding-top:3px;padding-bottom:4px;padding-right:5px;background-color:#thisBgColor#;border-bottom:1px solid ##5B5B5B;">#NumberFormat(qryValue.p_value,'99,999')#</td>
      </tr>
    ');
   };
   writeOutput('
      <tr>
        <td colspan="5" style="font-size:11px;padding-left:5px;padding-top:5px;padding-right:5px;padding-bottom:7px;background-color:##09AFFF;color:##FFFFFF;font-style:italic;border-bottom:1px solid ##5B5B5B;">footer text</td> 
      </tr>  
    </table>
  '); 
};//end savecontent

在这里可以正常工作-我可以输出变量mailBody,并且看到适合HTML电子邮件的样式表。

我们有库存的电子邮件模板,我们使用集中存储的(.htm)文件。我正在尝试将此内容注入要发送的模板之一。

    mailerService = new mail();
    mailTemplate = fileRead(application.paths.physicalroot & '\email\project1\templates\people.htm');
    mailerService.setTo("me@domain.com"); 
    mailerService.setFrom("support@domain.com"); 
    mailerService.setSubject("People Report"); 
    mailerService.setType("html"); 
    mailerService.send(body=mailTemplate);

在.htm模板文件中,

<cfoutput>#mailBody#</cfoutput>

这正是给我的-#mailBody#。在不太复杂的电子邮件中,使用

之类的东西我没有问题
<cfoutput>Welcome #qryPeople.p_first# #qryPeople.p_last#</cfoutput>

或访问在驱动电子邮件的cfscript模板上设置的其他变量。但是我不知道为什么我的savecontent变量不能按预期工作。

解决方案-以前尝试执行savecontent include无效,但可能在ACF 2010上有效。这在ACF2016上有效。

mailerService = new mail();
savecontent variable="mailTemplate" {
  include variables.templatePath & '\email\project1\templates\people.htm';
};
mailerService.setTo("me@domain.com"); 

People.htm包括在内,其他保存内容(邮件正文)在电子邮件中呈现。现在,使用较新的cfmail()脚本来找出答案...

2 个答案:

答案 0 :(得分:3)

如果只有一个“块”要评估,我将使用字符串函数替换它:

select *
from TABLE
where A_column like 'A%' 
  and B_column = '5' 
  and REGEXP_LIKE(C_column, '^(SH|SY_0005)')

另一个选项是将include与saveContent一起使用:

这可能需要您将* .htm中的模板重命名为* .cfm文件。

mailTemplate = fileRead(application.paths.physicalroot & '\email\project1\templates\people.htm');
mailTemplate = replaceNoCase(mailTemplate, "##mailBody##", mailBody, "one");
// continue with mailerService.* methods

变量finalBody现在应包含mailBody变量中的内容。

答案 1 :(得分:1)

如果您可以在模板中使用CF标记,则应该可以使用以下方法获得所需的结果:

<cfsavecontent variable="mailBody">
<cfinclude template="#application.paths.physicalroot#\email\project1\templates\people.htm"> 
</cfsavecontent>