栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c#基础知识之获取exchange中的图片

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c#基础知识之获取exchange中的图片

摘要

在exchange 2007或者2010中获取的邮件内容为html标签格式,也就是一个页面。如果里面含有img标签,你会发现img标签的src属性为cid:xxxxxxxxxxxx的一串字符串,并不是url,这时候就造成页面上图片显示不出来。

解决办法

在网上找了一种解决办法。

原文地址:http://stackoverflow.com/questions/6650842/ews-exchange-2007-retrieve-inline-images

首先创建cid的索引


private const string CidPattern = "cid:";

private static HashSet BuildCidIndex(string html)
{
   var index = new HashSet();
   var pos = html.IndexOf(CidPattern, 0);
   while (pos > 0)
   {
       var start = pos + CidPattern.Length;
       index.Add(start);
       pos = html.IndexOf(CidPattern, start);
   }
   return index;
}


在索引的基础上封装一个替换的方法


private static void AdjustIndex(HashSet index, int oldPos, int byHowMuch)
{
   var oldIndex = new List(index);
   index.Clear();
   foreach (var pos in oldIndex)
   {
       if (pos < oldPos)
           index.Add(pos);
       else
           index.Add(pos + byHowMuch);
   }          
}

private static bool ReplaceCid(HashSet index, ref string html, string cid, string path)
{
   var posToRemove = -1;
   foreach (var pos in index)
   {
       if (pos + cid.Length < html.Length && html.Substring(pos, cid.Length) == cid)
       {
           var sb = new StringBuilder();
           sb.Append(html.Substring(0, pos-CidPattern.Length));
           sb.Append(path);
           sb.Append(html.Substring(pos + cid.Length));
           html = sb.ToString();

           posToRemove = pos;
           break;
       }
   }

   if (posToRemove < 0)
       return false;

   index.Remove(posToRemove);
   AdjustIndex(index, posToRemove, path.Length - (CidPattern.Length + cid.Length));

   return true;
}


在获取的item中获取附件


FileAttachment[] attachments = null;
var index = BuildCidIndex(sHTMLCOntent);
if (index.Count > 0 && item.Attachments.Count > 0)
{
   var basePath = Directory.GetCurrentDirectory();

   attachments = new FileAttachment[item.Attachments.Count];
   for (var i = 0; i < item.Attachments.Count; ++i)
   {
     var type = item.Attachments[i].ContentType.ToLower();
     if (!type.StartsWith("image/")) continue;                    
     type = type.Replace("image/", "");

     var attachment = (FileAttachment)item.Attachments[i];
     var cid = attachment.ContentId;
     var filename = cid + "." + type;
     var path = Path.Combine(basePath, filename);
     if(ReplaceCid(index, ref sHTMLCOntent, cid, path))
     {
        // only load images when they have been found          
        attachment.Load(path);
        attachments[i] = attachment;
     }
  }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/231884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号