繁体   English   中英

C#如何从URL中获取CID(内容ID) <img src=“url.jpg” /> 标签

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM