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);
    }
}

好吧,别担心,我会进行大量测试并管理异常,但将所有代码放在这里并不重要。

一些精确度:

  • newItem是来自SharePoint网站的List项目。 我需要一个AttachmentCreationInformation类型来为这个项目添加一个附件。
  • 我发现这个职位: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

    下一篇: saving a FlowDocument to disk as an XPS document