CFScriptCFCでCFmailを使用しようとしています。CFMailでクエリを反復処理し、クエリの内容に基づいて値を変更したいと思います。クエリオブジェクトに1行しかない限り、これは問題なく実行されます。複数の行(たとえば5行)がある場合、5つの電子メールを送信しますが、各電子メールには最初のクエリ行の値が含まれます。私はいくつかの異なることを試みました。下記参照:
クエリオブジェクト:
Name | Email | Number
----------------------------------
John | john@foo.com | 12
Bill | bill@bar.com | 42
Ann | ann@bat.com | 100
CFScript:
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);
上記のコードを使用すると、3通のメールが届きます。各メールには、「こんにちはジョン。あなたの番号は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 Server2008R3でColdfusion9.0.1を使用しています。