[c#]获取exchange中的图片

[c#]获取exchange中的图片,第1张

概述摘要在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<int> BuildCidIndex(string html){var index = new HashSet<int>();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<int> index, int oldPos, int byHowMuch){var oldIndex = new List<int>(index);index.Clear();foreach (var pos in oldIndex){if (pos < oldPos)index.Add(pos);elseindex.Add(pos + byHowMuch);}}private static bool ReplaceCid(HashSet<int> 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 foundattachment.Load(path);attachments[i] = attachment;}}} 摘要

解决办法

CIDPattern = <span >private <span >static HashSet<<span >int> BuildCidindex(<span >string<span > HTML)
{
<span >var
index = <span >new HashSet<<span >int><span >();
<span >var pos = HTML.IndexOf(CIDPattern,<span >0<span >);
<span >while (pos > <span >0<span >)
{
<span >var start = pos +<span > CIDPattern.Length;
index.Add(start);
pos =<span > HTML.IndexOf(CIDPattern,start);
}
<span >return<span > index;
}

AdjustIndex(HashSet<> index, oldPos, oldindex = List<> ( pos (pos <+<span >private <span >static <span >bool ReplaceCID(HashSet<<span >int> index,<span >ref <span >string HTML,<span >string cID,<span >string<span > path)
{
<span >var
posToRemove = -<span >1
<span >;
<span >foreach
(<span >var
pos <span >in
<span > index)
{
<span >if
(pos + cID.Length < HTML.Length && HTML.Substring(pos,cID.Length) ==<span > cID)
{
<span >var
sb = <span >new<span > StringBuilder();
sb.Append(HTML.Substring(<span >0,pos-<span >CIDPattern.Length));
sb.Append(path);
sb.Append(HTML.Substring(pos +<span > cID.Length));
HTML =<span > sb.ToString();

        posToRemove </span>=<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; pos;        </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;break</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;;    }}</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span> (posToRemove < <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800080;"&gt;0</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;)    </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span> <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;false</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;;index.Remove(posToRemove);AdjustIndex(index,posToRemove,path.Length </span>- (C<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>Pattern.Length +<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; c<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>.Length));</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;return</span> <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;true</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;;

}

fileAttachment[] attachments = index = (index.Count > && item.Attachments.Count > basePath =attachments </span>= <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;new</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; <a href="https://m.jb51.cc/tag/file/" target="_blank" >file</a>Attachment[item.Attachments.Count];</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;for</span> (<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> i = <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800080;"&gt;0</span>; i < item.Attachments.Count; ++<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;i){ </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> type =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; item.Attachments[i].<a href="https://m.jb51.cc/tag/ContentType/" target="_blank" >ContentType</a>.T<a href="https://m.jb51.cc/tag/ol/" target="_blank" >ol</a>ower(); </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span> (!type.StartsWith(<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;image/</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span>)) <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;continue</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;; type </span>= type.Replace(<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;image/</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span>,<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;""</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt;); </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> attachment =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; (<a href="https://m.jb51.cc/tag/file/" target="_blank" >file</a>Attachment)item.Attachments[i]; </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> c<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a> =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; attachment.Content<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>; </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> <a href="https://m.jb51.cc/tag/file/" target="_blank" >file</a><a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a> = c<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a> + <span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;.</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #800000;"&gt;"</span> +<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; type; </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;var</span> path =<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; Path.Combine(basePath,<a href="https://m.jb51.cc/tag/file/" target="_blank" >file</a><a href="https://m.jb51.cc/tag/name/" target="_blank" >name</a>); </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;if</span>(ReplaceC<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>(index,<span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #0000ff;"&gt;ref</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #000000;"&gt; s<a href="https://m.jb51.cc/tag/HTML/" target="_blank" >HTML</a>COntent,c<a href="https://m.jb51.cc/tag/ID/" target="_blank" >ID</a>,path)) { </span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt;//</span><span https://m.jb51.cc/tag/color/" target="_blank" >color</a>: #008000;"&gt; only load images when t<a href="https://www.jb51.cc/tag/hey/" target="_blank" >hey</a> have been found </span>

<span > attachment.Load(path);
attachments[i] =<span > attachment;
}
}
}

总结

以上是内存溢出为你收集整理的[c#]获取exchange中的图片全部内容,希望文章能够帮你解决[c#]获取exchange中的图片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1264003.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存