首页 > 解决方案 > 将 CFMAIL 转换为等效脚本并使用查询

问题描述

所以我正在将旧应用程序转换为 ColdBox MVC 并尝试将标签转换为脚本。在过去我会做

<cfmail
query="getRecipients"
type="text/html"
from="Me <me@me.org>"
to="#getRecipients.email#"
subject="Hello everybody from me">
<p>Hey #getRecipients.name#, how are you?</p>
</cfmail>

我完成了。邮件将发送给从 getRecipients 查询返回的任何人。但现在看来我必须

var oMail = mailService
    .newMail(
        to="test1@test.com",
        from="me@me.org",
        subject="Hello everybody from me",
        bodyTokens={ name=name} 
        );

    oMail.setBody("
Hey @name@, how are you?

    ");

    var results = mailService.send( oMail );                                
}

这本身似乎过于冗长,但至少在发送给单个收件人或逗号分隔列表时有效。但无论我做什么,我都无法将其发送到查询的收件人列表。

我尝试了 to=getRecipients 并得到一个错误,即“to”的值不是字符串。我尝试了 to="getRecipients",虽然我没有收到错误,但邮件没有发送(甚至排队等待发送)。其他各种尝试也要么出错,要么静默失败。

我在这里阅读了SO 讨论,这似乎表明无法在基于脚本的邮件中使用查询。但那个讨论是从 2012 年开始的——肯定不再是这样了,对吧?肯定可以在脚本中复制这一非常基本的特性,对吧?我错过了什么?我对此进行了大量研究,我发现的每个示例都只发送到一个硬编码地址。

我将不胜感激任何意见或建议。非常感谢您的帮助!

标签: coldfusioncfmlcoldboxcfmail

解决方案


我相信会是:

var oMail = mailService
    .newMail(
        to=valueList(getRecipients.email),
        from="me@me.org",
        subject="Hello everybody from me",
        bodyTokens={ name=name} 
        );

请参阅:https ://cfdocs.org/valuelist


推荐阅读