【发布时间】:2019-08-23 03:31:18
【问题描述】:
我正在设置一组电子邮件,并从 MySql 表中提取信息开始
<cfoutput>
<cfset headls ='PersonFn,PersonLn,PersonEmail1'>
<cfquery name = "sord" datasource = "whatever">
select distinct PersonID,#headls# from PersonRepDb
</cfquery>
</cfoutput>
这会产生正确的输出。然后,我遍历查询结果,向每个人发送一封电子邮件。
<cfset sordlen = sord.recordcount>
<cfloop from = "1" to = "#sordlen#" index = 'j'>
<cfmail
from = "#session.user#"
to = "#sord['PersonEmail1'][j]#"
password = "#session.password#"
username = "#session.user#"
server = "localhost"
replyto = "#txt['replyto']#"
subject = "#txt['repsubject']#"
type = "html" >
...stuff
</cfmail>
</cfloop>
当我尝试运行此程序时,我收到一条错误消息:“必须定义以下属性之一 [to, cc, bcc]”。显然“to”在那里,如果我用特定的电子邮件替换变量,如“joan@gmail.com”,错误消息就会消失。所以显然'to'之后的变量没有被解码。
我尝试将变量 sord['PersonEmail1'][j] 拆分为 @ 之前和之后的部分
<cfset preml = GetToken("#sord['PersonEmail1'][j]#",1,'@')>
<cfset posml = GetToken("#sord['PersonEmail1'][j]#",2,'@')>
然后将其设置为
to = "#preml#@#posml#"
但这并没有帮助。
谁能告诉我如何解决这个问题?
【问题讨论】:
-
什么版本的CF?
-
你需要使用动态列名吗?任何时候你有一个动态的 SQL 语句,你都有注入的风险。如果您可能需要多个列,最好选择所有需要的列并稍后过滤它们。
-
您的代码似乎没有任何问题。您的其他变量是否返回了您的预期?此外,您不需要
cfloop,您可以指定query="sord"属性,它会为您逐步检查查询结果。然后你就用.....to=sord.PersonEmail1.....。 -
我更喜欢 cfoutput query = 'sord' ,但输出标签似乎会导致 cfmail 标签出现问题。你知道我可以将它与 cfmail 标签一起使用吗?我有多个人,每个人都必须收到他/她自己的 cfmail 标签,因为电子邮件具有动态内容。你是对的,我的变量没有返回我的想法。现在似乎一切正常。
-
那么当错误发生时
#sord['PersonEmail1'][j]#的实际值是多少呢?显然要清理名称和域。
标签: coldfusion cfmail