为什么cfexchangemail的get动作永远不会返回?

时间:2014-01-10 15:53:57

标签: coldfusion exchange-server exchangewebservices outlook-web-app

我们正在运行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从图片中删除。

1 个答案:

答案 0 :(得分: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>