[英]C# How to obtain cid (content id) from url in a <img src=“url.jpg” /> tag
我必须发送一个Multipart MailMessage,其正文是从html页开始创建的。 问题是我必须“翻译”以这种方式编写的图像标签
<img src="url.jpg" />
到这种多部分标签
<img src="cid:imageid" />
考虑到在替换此文本之前,我必须捕获每个图像URL并为每个图像URL创建一个新的LinkedResource实例,您是否知道是否有任何工具可以为我完成此工作?
我正在使用HtmlAgilityPack ,这使得替换img src值非常容易:
Dictionary<string, string> cids = new Dictionary<string, string>();
int imgCount = 0;
HtmlDocument doc = new HtmlDocument();
doc.Load(htmlFilename, System.Text.Encoding.UTF8);
foreach(HtmlNode link in doc.DocumentNode.SelectNodes("//img"))
{
HtmlAttribute att = link.Attributes["src"];
Console.Write("img src = " + att.Value);
if (!cids.ContainsKey(att.Value))
{
cids[att.Value] = imgCount.ToString() + "." + GetRandomString(10) + "@domain.com";
imgCount++;
}
att.Value = "cid:" + cids[att.Value];
Console.WriteLine(" became " + att.Value);
}
StringWriter sw = new StringWriter();
doc.Save(sw);
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(sw.ToString(), System.Text.Encoding.GetEncoding("utf-8"), "text/html");
之后,您必须迭代cids集合并加载和附加每个文件作为链接资源,并将ContentID设置为刚刚设置的cid值。
我是这个论坛的新手,并且正在使用MS Outlook对象库。 好吧,长期以来,我也一直陷于这个愚蠢的问题。 我记得很久以前读过有关它的内容,但无法再次找到该帖子。
无论如何,这是您目前可以执行的操作,这也是我正在执行的操作(请接受VB而不是C#中的答案)
<Code>
EmailItem = Mailitem
EmailItem.HTMLBODY = </img src = "SOMETHING.jpg" ...../>
EmailItem.Save
EmailItem.HTMLBODY >>> Read this text and parse it for CID of the image tag.
</Code>
保存后,它将立即转换为CID(为其分配了唯一的内容ID)。 通过解析并重建您的HTML。 这是一个很长的路要走,但是现在可以解决这个问题。
另外,如果图像托管在公共网络上,则无需将其更改为CID,则在发送此电子邮件时会自动完成。
希望这可以解决您的问题,或者至少给您一个想法。
关于虚拟机
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.