【发布时间】:2015-05-29 03:37:36
【问题描述】:
所以我目前正在构建一个应用程序,它允许一组用户查看来自某个电子邮件地址的所有电子邮件。这一切正常。当我尝试获取附件时,我遇到了问题。
我对这个领域比较陌生,并使用了 Microsoft 找到的示例 here. 将其与下面的代码进行比较:
protected internal override Stream GetAttachmentStreamFinal(MailAttachmentDetails attachment)
{
var response = m_service.GetAttachments(new[] { attachment.Id }, BodyType.Text, Enumerable.Empty<PropertyDefinitionBase>());
if (response.OverallResult != ServiceResult.Success)
{
if (response.Count > 0)
{
var ex = new MailException(response[0].ErrorMessage);
ex.Data.Add(response[0].ErrorCode, response[0].ErrorMessage);
foreach (var ed in response[0].ErrorDetails)
{
ex.Data.Add(ed.Key, ed.Value);
}
throw ex;
}
throw new MailException("Error occurred while fetching the attachment from the mail service.");
}
foreach (var attachmentResponse in response)
{
if (attachmentResponse.Attachment is FileAttachment)
{
var fa = attachmentResponse.Attachment as FileAttachment;
var cs = new MemoryStream(fa.Content);
fa.Load(cs);
cs.Seek(0, SeekOrigin.Begin);
return cs;
}
}
return null;
}
如您所见,两组代码非常相似。但是,当我逐步进入 attachmentResponse.Attachment is FileAttachment 行时,我会抛出此错误
尝试通过方法“Mail.ExchangeEmailService.GetAttachmentStreamFinal(Mail.MailAttachmentDetails)”访问方法“Microsoft.Exchange.WebServices.Data.GetAttachmentResponse.get_Attachment()”失败。
一切都正确传递,响应返回成功。
在单步执行我的代码时,我注意到 Attachment 显示为非公共成员。但由于这是封装在 Microsoft 的类中,我不确定为什么会这样或我能做什么?
【问题讨论】:
-
您是从邮件应用程序(在 Outlook 内部运行)执行此操作吗?您链接的示例适用于邮件应用程序,比普通的 EWS 应用程序更复杂。
-
否,它在 Web 应用程序中运行。这在客户端请求文件时使用
-
我也遇到了同样的问题,虽然我使用了最新版本的程序集形式 nuget,但是当我从 MSI 安装后引用程序集时它可以工作。你有没有找到一些稳定的解决方案?
标签: c# exchange-server exchangewebservices ews-managed-api