Exchange 2013上的C#EWS Api:将附件添加到流中
我想从邮件中获取附加文件为流类型。 但是如何创建流? 我正确地获取邮件项目(内容,主题,附加文件)。 参考以下链接:EWS托管API:获取附件我试图执行以下操作:
int nbAttachments = message.Attachments.Count;
FileAttachment[] attachedFiles = new FileAttachment[nbAttachments];
for (int i=0; i < nbAttachments; i++)
{
attachedFiles[i] = message.Attachments[i] as FileAttachment;
}
for (int i = 0; i < attachments.Length; i++)
{
if (attachments[i].Name != null)
{
AttachmentCreationInformation infoAttachment = new AttachmentCreationInformation();
attachments[i].Load(infoAttachment.ContentStream);
infoAttachment.FileName = attachments[i].Name;
newItem.AttachmentFiles.Add(infoAttachment);
}
}
好吧,别担心,我会进行大量测试并管理异常,但将所有代码放在这里并不重要。
一些精确度:
我发现这个职位:MSDN论坛并尝试以下方法:
FileStream stream = new FileStream(attachments [i] .Name,FileMode.Open);
byte [] byteArray = new byte [stream.Length];
stream.Read(byteArray,0,Convert.ToInt32(stream.Length));
stream.Close();
(这里我的文本被打破了,因为我无法将它转换为代码格式,所以很抱歉斜体...今天运气不好)
但它搜索本地驱动器上的附件...
请帮帮我
基本上我无法得到我的附件[我]可以添加到FileStream var ...
非常感谢,真的。
如果我理解正确,你想在任何地方保存附件? EWS为FileAttachment对象的Content属性中存储的每个文件提供一个字节数组,并且从那里可以非常容易地执行此操作:
foreach (var a in mail.Attachments)
{
FileAttachment fa = a as FileAttachment;
if(fa != null)
{
try
{
//if you don't call this the Content property may be null,
//depending on your property loading policy with EWS
fa.Load();
}
catch
{
continue;
}
using(FileStream fs = System.IO.File.OpenWrite("path_to_file"))
{
fs.Write(fa.Content, 0, fa.Content.Length);
}
}
}
如果您只想让Stream对象执行其他操作,只需创建一个MemoryStream即可:
MemoryStream ms = new MemoryStream(fa.Content);
感谢@anusiak :),
这是我关于流的代码:
for (int i = 0; i < attachments.Length; i++)
{
if (attachments[i].Name != null && attachments[i].Content != null)
{
MemoryStream mstream = new MemoryStream(attachments[i].Content);
AttachmentCreationInformation spAttachment = new AttachmentCreationInformation();
spAttachment.ContentStream = mstream;
spAttachment.FileName = attachments[i].Name;
newItem.AttachmentFiles.Add(spAttachment);
}
}
newItem.Update();
我必须为从邮件中提取的每个附件调用Load()方法,然后才能将它们存储到FileAttachment var中。 然后我使用MemoryStream将数据流添加到需要使用的特殊类型中。 其余代码是关于将其添加到SharePoint列表中的项目,因此无需解释。
链接地址: http://www.djcxy.com/p/49145.html上一篇: C# EWS Api on Exchange 2013 : Get an attachment into a Stream