c#如何从url中获取cid (content id)

本文关键字:quot url img src jpg 获取 cid id content | 更新日期: 2023-09-27 18:04:00

我必须发送一个Multipart MailMessage,其主体是从html页面开始创建的。问题是,我必须"翻译"这样写的图像标签

<img src="url.jpg" />

到这种多部分标签

<img src="cid:imageid" />

考虑到我必须捕获每个图像url并在做此文本替换之前为每个人创建一个新的LinkedResource实例,你知道是否有任何工具可以为我做这项工作吗?

c#如何从url中获取cid (content id) <img src="url.jpg"/比;标

我正在使用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");

在此之后,您必须迭代cid集合并加载并附加每个文件作为链接资源,将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,当您发送此电子邮件时将自动完成。

希望这能解决你的问题,或者至少给你一个想法。

的问候virend