博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[c#]获取exchange中的图片
阅读量:6220 次
发布时间:2019-06-21

本文共 2507 字,大约阅读时间需要 8 分钟。

摘要

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

解决办法

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

原文地址:

首先创建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;      }   }}

转载于:https://www.cnblogs.com/wolf-sun/p/5687042.html

你可能感兴趣的文章
如何为你的开源项目选择正确的品牌架构
查看>>
Percona XtraDB Cluster 5.7.18-29.20 发布
查看>>
《Excel 职场手册:260招菜鸟变达人》一第 6 招 带有上标的指数录入
查看>>
在 HAproxy 1.5 中使用 SSL 证书 【已翻译100%】(2/2)
查看>>
《FLUENT 14流场分析自学手册》——第1章 流体力学基础 1.1 流体力学基本概念
查看>>
CAAI演讲实录丨李德毅院士:交互认知——从图灵测试的漏洞谈开去
查看>>
《Java入门经典(第7版)》—— 导读
查看>>
《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一6.2 基本光照效果
查看>>
在Ubuntu中安装XScreenSaver
查看>>
《HTML5 2D游戏编程核心技术》——第3章,第3.9节使用视差产生视深的假象
查看>>
Practical Clojure - 简介
查看>>
Django 博客开发教程 4 - 让 Django 完成翻译:迁移数据库
查看>>
《Python密码学编程》——2.7 在线跟踪程序
查看>>
雾里看花之 Python Asyncio
查看>>
Velocity官方指南-使用Velocity
查看>>
jQuery获取数组对象的值
查看>>
Android+struts2+json方式模拟手机登录功能
查看>>
批量生成 htpasswd 密码
查看>>
大型网站技术架构之秒杀系统架构设计
查看>>
一、大型网站技术架构演化
查看>>