C # Как получить cid (идентификатор контента) из URL в теге <img src = "url.jpg" /> - PullRequest
0 голосов
/ 29 июля 2011

Мне нужно отправить Multipart MailMessage с созданием его тела, начиная со страницы html. Проблема в том, что мне нужно «перевести» тег изображения, написанный таким образом

<img src="url.jpg" />

к многоэлементному тегу такого типа

<img src="cid:imageid" />

Учитывая, что мне нужно перехватить каждый URL-адрес изображения и создать новый экземпляр LinkedResource для каждого из них перед заменой этого текста, знаете ли вы, есть ли какой-нибудь инструмент, который выполняет эту работу для меня?

Ответы [ 2 ]

1 голос
/ 11 апреля 2012

Я использую 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.

0 голосов
/ 29 июля 2011

Я новичок в этом форуме и использую библиотеку объектов 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 (ему присваивается уникальный идентификатор содержимого).Разобрать его и восстановить ваш HTML.Это долгий путь, но возможный выход из этой проблемы сейчас.

Кроме того, если изображение размещено в общедоступной сети, нет необходимости менять его на CID, оно будет автоматически выполнено при отправке этогоэлектронная почта.

Надеюсь, что это решит вашу проблему или может дать вам хотя бы идею.

С уважением Virender

...