0

我在 CF 8.0.1 上尝试这个,但失败了。我正在尝试将自定义值传递给自定义标签,如下所示:

<cf_call ckmail="#{to='test@test.com',from='test@test.com',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}#">

在自定义标签 call.cfm 我有以下内容:

<cfparam name="attributes.ckmail" default="">
<cfmail attributecollection = "#attributes.ckmail#">

我得到的错误是:

在第 11 行第 18 列发现无效的 CFML 构造。ColdFusion 正在查看以下文本:{

它在 CF9 中运行良好,但在 CF8.0.1(或以前的版本)中,它因上述消息而失败。


截至 2012 年 7 月 18 日的代码更新


我尝试使用 dan 的代码,但现在我面临一个不同的问题,在我的自定义标签中,我使用的是这样

       <cfset emailSetting = StructNew()>
   <!--- loop our query string values and set them in our structure --->
   <cfloop list="#attributes.ckmail#" index="key" delimiters=",">
     <cfset emailSetting["#listFirst(key,'=')#"] = urlDecode(listLast(key,"="))>
   </cfloop>
   <cfdump var="#emailSetting#"><cfabort>
       <cfmail attributecollection = "#emailSetting#"> 

以上是我在自定义标签中的设置,我从我的代码中将其称为

       <cf_call ckmail="to=i@test.com,from=test@domain.com,subject='Error reported',
    server=mail.domain.com,username=test@domain.com,password=tes@,type=html">

我现在得到的错误是“smtp”服务器未定义,

如果我在 cfadmin 中添加 smtp 详细信息,它可以工作,可能是它忽略了我输入的字段中的值,但是当 cfadmin 中也没有定义 smtp 设置时它会显示错误。

4

3 回答 3

2

隐式结构应该可以在 CF8.0.1 中正常工作。

您当然可以使用以下代码来使用 structNew() 函数构建结构:

<cfset mailArgs             = StructNew() />
<cfset mailArgs.to          = 'test@test.com' />
<cfset mailArgs.from        = 'test@test.com' />
<cfset mailArgs.subject     = 'Error reported' />
<cfset mailArgs.mailserver  = 'mail.domain.com' />
<cfset mailArgs.username    = '1234' />
<cfset mailArgs.password    = 'tested' />

<cf_call ckmail="#mailArgs#"> 

您能否在此处发布来自 ColdFusion 的更详细的错误报告,以便我们帮助您找到错误的确切位置?或者您可以发布更多代码吗?

于 2012-07-04T10:56:56.077 回答
0

嗯....我想知道在自定义标签调用中,英镑符号对其他任何人来说是否看起来很奇怪?结构符号通常如下所示:

<cfset mystruct = {to='test@test.com',from='test@test.com',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/>

磅符号会导致 CF 尝试并“做某事”来合并值(就像当你这样做时一样<cfset z = #x+y#/> ......但将它们关闭允许 CF “看到”构造函数指示符(花括号)。

但我不确定自定义标签在该实例中的行为方式。你有没有试过这样称呼它:

<cf_call 
 ckmail={to='test@test.com',from='test@test.com',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/>

或者失败 - 正如建议的那样 - 提前将其设置为:

<cfset args = {to='test@test.com',from='test@test.com',subject='Error reported',mailserver='mail.domain.com',username='1234',password='tested'}/>

然后调用:

<cf_call ckmail="#args#"/>

看看这些是否有效?

于 2012-07-04T14:27:55.597 回答
0

您在 ckmail 属性中使用了 struct 文字语法,我认为这改变了 CF8 和 CF9 之间的行为。我会尝试以老式的方式创建一个结构,看看是否可行。

于 2012-07-04T10:36:03.810 回答