public static void ChangeSmileLinks(this MailDraftData draft, ILog log = null) { if (log == null) { log = new NullLog(); } var baseSmileUrl = MailStoragePathCombiner.GetEditorSmileBaseUrl(); var doc = new HtmlDocument(); doc.LoadHtml(draft.HtmlBody); var linkNodes = doc.DocumentNode.SelectNodes("//img[@src and (contains(@src,'" + baseSmileUrl + "'))]"); if (linkNodes == null) { return; } foreach (var linkNode in linkNodes) { var link = linkNode.Attributes["src"].Value; log.InfoFormat("ChangeSmileLinks() Link to smile: {0}", link); var fileName = Path.GetFileName(link); var data = StorageManager.LoadLinkData(link, log); if (!data.Any()) { continue; } var attach = new MailAttachmentData { fileName = fileName, storedName = fileName, contentId = link.GetMd5(), data = data }; log.InfoFormat("ChangeSmileLinks() Embedded smile contentId: {0}", attach.contentId); linkNode.SetAttributeValue("src", "cid:" + attach.contentId); if (draft.AttachmentsEmbedded.All(x => x.contentId != attach.contentId)) { draft.AttachmentsEmbedded.Add(attach); } } draft.HtmlBody = doc.DocumentNode.OuterHtml; }