4

我们正在运行 Coldfusion 9.0.1,并且多年来已成功使用 cfexchangemail 检索电子邮件。

在过去的几天里,一些用户的电话再也没有回来。这导致 ColdFusion 堆积活动请求,最终导致任何请求都没有响应。

对于其他用户,呼叫成功。

这是电话:

<cfexchangemail action="get" folder="Inbox " name="weeksMail" connection="testconn1">
    <cfexchangefilter name="maxRows" value=4>
</cfexchangemail>

有没有人遇到过类似的问题?

更新:

我使用在生产中运行良好的测试帐户运行了一些手动查询。如果我删除 maxRows 过滤器,我会收到一个运行时间很长的请求(还没有看到它返回)。将 maxRows 设置为 18 允许请求完成,但仅在大约 10 秒后完成。将 maxRows 设置为 19 似乎使其进入非响应模式。

这似乎表明消息的​​大小或某种损坏的数据。

更新 2:

这似乎是电子邮件问题的大小。如果收件箱只有一封电子邮件,如果大小(大约)约为 20kb,则呼叫将永远不会返回。一个 19kb 的电子邮件可以正确返回。

现在的问题是:一直都是这种情况,我们现在只看到这么大的电子邮件还是发生了什么变化?据我所知,我们的 CF 安装没有任何变化。

更新 3

Coldfusion 10 现在已经过测试。我们得到相同的结果。

更新 4

我已经能够通过直接命中 WEBDAV 来触发问题,这将 ColdFusion 排除在外。

4

1 回答 1

4

根据我的经验,cfexchangemail 标签(CF10/CF11)总是很慢,有时您会收到请求超时错误。我最终使用了 Java EWS Managed API,它肯定比 cfexchangemail 标签快。但是,您只需要学习如何使用 API 返回的方法。

这是一个如何创建 microsoft.exchange.webservices 对象的示例

<cfscript>

    service = createObject("Java", "microsoft.exchange.webservices.data.ExchangeService");
    service.init();

    version = createObject("Java", "microsoft.exchange.webservices.data.ExchangeVersion");
    service.init(version.Exchange2010);

    credentials = createObject("Java", "microsoft.exchange.webservices.data.WebCredentials");

    credentials.init(yourusername, yourpassword);
    service.setCredentials(credentials);

    uri = createObject("Java", "java.net.URI");
    uri.init("outlook webservices url");
    service.setUrl(uri);
    WellKnownFolderName=createObject("Java","microsoft.exchange.webservices.data.WellKnownFolderName");
    result = service.FindItems(service.WellKnownFolderName.Inbox, CreateObject("java", "microsoft.exchange.webservices.data.ItemView").init(100));

    for(item in result.getItems(){
        // ..loop through each field and store their value 
        // in query object or something...
    }

</cfscript>
于 2014-07-21T21:20:45.957 回答