首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用冷融合技术处理来自邮箱的邮件

用冷融合技术处理来自邮箱的邮件
EN

Stack Overflow用户
提问于 2016-05-12 08:45:45
回答 3查看 144关注 0票数 1

我刚刚开始在我为内部使用开发的网络应用程序中使用Mailgun进行双向电子邮件。我已经设置了一条将消息转发到服务器上的URL的路由--它运行良好。

但是,处理这些消息的代码正在抛出错误。Malign以http post的形式发送数据,然后我可以使用表单变量引用它。最初,我在一些字段(字段名中带有连字符的字段)上得到了“未定义”错误,但是现在似乎已经解决了。现在,代码在CFQUERY插入中遇到了问题,错误声明我在SQL语法中有一个错误--但是我看不到它有什么问题!

这是我给邮件发送邮件的页面代码;

代码语言:javascript
复制
<cfset thebody = form["body-plain"]> 
<cfset thesender = form["sender"]>
<cfset therecipient = form["sender"]>
<cfset thesubject = form["subject"]>

<cfquery name="addmail">
INSERT INTO mailmessages(from,sender,recipient,subject,body,msgdate)
VALUES('#thesender#','#thesender#','#therecipient#','#thesubject#','#thebody#',#CreateODBCDateTime(Now())#)
</cfquery>

错误消息声明;

代码语言:javascript
复制
Error Executing Database Query. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from,sender,recipient,subject,body,msgdate) VALUES('lee@mydomain.com','l' at line 1

这里可以看到表单的cfdump (这是通过cfcatch语句中的cfmail发送的--这是我能够看到任何错误的唯一方法);

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-12 14:20:15

from列名是一个保留字,所以这就是mySQL所抱怨的。

如果您转义了列名,它应该会修复这个问题。

与cfqueryparam一起,您的代码应该如下所示:

代码语言:javascript
复制
<cfset thebody = form["body-plain"]> 
<cfset thesender = form["sender"]>
<cfset therecipient = form["sender"]>
<cfset thesubject = form["subject"]>

<cfquery name="addmail">
    INSERT INTO mailmessages (
        "from", 
        sender, 
        recipient, 
        subject, 
        body, 
        msgdate
    )
    VALUES (
        <cfqueryparam value="#thesender#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#thesender#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#therecipient#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#thesubject#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#thebody#" cfsqltype="cf_sql_varchar">,
        <cfqueryparam value="#CreateODBCDateTime(Now())#" cfsqltype="cf_sql_timestamp">
    )
</cfquery>
票数 4
EN

Stack Overflow用户

发布于 2016-05-12 09:22:37

如错误消息所示,insert查询中存在语法错误。似乎您正在传递的日期值附近缺少单引号(')。它应该写成这样:

代码语言:javascript
复制
<cfquery name="addmail">
    INSERT INTO mailmessages(from,sender,recipient,subject,body,msgdate)
    VALUES('#thesender#','#thesender#','#therecipient#','#thesubject#','#thebody#','#CreateODBCDateTime(Now())#')
</cfquery>

要消除此类语法错误并防止SQL注入,请始终使用cfqueryparams如下所示:

代码语言:javascript
复制
<cfquery name="addmail">
    INSERT INTO mailmessages (from,sender,recipient,subject,body,msgdate)
    VALUES ( 
                <cfqueryparam  value="#thesender#" cfsqltype="CF_SQL_VARCHAR">,
                <cfqueryparam  value="#thesender#" cfsqltype="CF_SQL_VARCHAR">,
                <cfqueryparam  value="#therecipient#" cfsqltype="CF_SQL_VARCHAR">,
                <cfqueryparam  value="#thesubject#" cfsqltype="CF_SQL_VARCHAR">,
                <cfqueryparam  value="#thebody#" cfsqltype="CF_SQL_VARCHAR">,
                <cfqueryparam  value="#CreateODBCDateTime(Now())#" cfsqltype="CF_SQL_TIMESTAMP">
            )
</cfquery>

您也可以按照您为该列指定的DB或数据类型使用CF_SQL_TIMESTAMP,而不是使用CF_SQL_DATE

票数 2
EN

Stack Overflow用户

发布于 2016-05-12 11:44:49

我不能选择杰迪荷马汤恩德上面的评论作为答案,但他正确地指出,我的字段名包含保留词,这是造成问题的原因。把那些修好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37181716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档