我正在尝试在 CFScript CFC 中使用 CFmail。我希望 CFMail 遍历查询,并根据查询内容更改值。只要查询对象只有 1 行,它就可以做到这一点。如果它有多行(例如 5 行),它将发送 5 封电子邮件,但每封电子邮件将包含来自第一个查询行的值。我尝试了一些不同的东西。见下文:
查询对象:
Name | Email | Number
----------------------------------
John | john@foo.com | 12
Bill | bill@bar.com | 42
Ann | ann@bat.com | 100
CF 脚本:
var mailerService = new mail();
mailerService.setQuery(nameEmailNumberQuery);
mailerService.setTo('eterps@sendtomefortesting.com');
mailerService.setFrom( 'noReply@example.com' );
mailerService.setSubject('Hi');
mailerService.setFailto('fail@foo.com');
mailerService.setType('html');
mailerService.setSpoolenable(true);
savecontent variable="mailBody"{
WriteOutput(
"Hello " & Name & ". Your number is: " & Number & "!"
);
}
mailerService.send(body=mailBody & tmpVariable);
使用上面的代码,我收到了三封电子邮件。每封电子邮件都写着:“你好,约翰。你的电话号码是:12!”
我也试过:
WriteOutput(
"Hello "
& mailerService.getQuery().Name
& ". Your number is: "
& mailerService.getQuery().Number
& "!"
);
和:
WriteOutput(
"Hello "
& mailerService.getQuery().Name[mailerService.getQuery.CurrentRow]
& ". Your number is: "
& mailerService.getQuery().Number[mailerService.getQuery.CurrentRow]
& "!"
);
编辑:我尝试过的几件事(@invertedSpear 建议的一件)
在电子邮件正文中使用查询文字:
WriteOutput(
"Hello "
& nameEmailNumberQuery.Name
& ". Your number is: "
& nameEmailNumberQuery.Number
& "!"
);
尝试使用递增的计数器:
var counter = 1;
...
WriteOutput(
"Hello "
& mailerService.getQuery().Name[counter]
& ". Your number is: "
& mailerService.getQuery().Number[counter]
& "!" & evaluate('counter = counter++')
);
每次都有相同的结果 - 3 封电子邮件,都带有“John”和“12”。每封电子邮件的转储mailerService.getQuery().CurrentRow
结果为“1”。我在 Windows Server 2008 R3 上使用 Coldfusion 9.0.1。