Wystąpił problem z wysyłaniem obrazu pocztą e-mail jako obrazu osadzonego w treści. Plik obrazu jest wyświetlany jako załącznik, co jest w porządku, ale wbudowana część obrazu jest wyświetlana jako czerwony znak x.
Oto, co mam do tej pory
LinkedResource inline = new LinkedResource(filePath);
inline.ContentId = Guid.NewGuid().ToString();
MailMessage mail = new MailMessage();
Attachment att = new Attachment(filePath);
att.ContentDisposition.Inline = true;
mail.From = from_email;
mail.To.Add(data.email);
mail.Subject = "Client: " + data.client_id + " Has Sent You A Screenshot";
mail.Body = String.Format(
"<h3>Client: " + data.client_id + " Has Sent You A Screenshot</h3>" +
@"<img src=""cid:{0}"" />", inline.ContentId);
mail.IsBodyHtml = true;
mail.Attachments.Add(att);
inline.ContentId
, w którym powinienatt.ContentId
.inline
wcale nie jest wymagane. Wolę Twoje pytanie od wszystkich odpowiedzi, ponieważ naprawdę nie musisz używać rozszerzeniaAlternateView
.Odpowiedzi:
Spróbuj tego
źródło
Może być minimalny kod C # do osadzania obrazu:
źródło
LinkedResource
do, aby działał w kliencie sieciowym Hotmail / Outlook.com. FWIW, próbowałem tego, jak również @Microsoft DN i to działało lepiej.NewGuid()
,AttachmentBase
klasa (któraLinkedResource
dziedziczy po) już ją tworzy w razie potrzeby.źródło
Oprócz powyższych komentarzy mam następujące dodatkowe uwagi:
"cid:att-001"
ten ma nie działać na iPhone (late 2016 Patch level), a stosowanie czystego alfa numeryczny"cid:att-001" -> "cid:att001"
Tak na marginesie. Renderowanie programu Outlook (nawet Office 2015) (nadal zdecydowana większość dla użytkowników biznesowych) wymaga użycia HTML w stylu TABLE TR TD, ponieważ nie obsługuje w pełni modelu pudełkowego HTML.
źródło
Jeszcze bardziej minimalistyczny przykład:
źródło
Spróbuj tego.
źródło
Musisz dodać LinkedResource do AlternateView
źródło
źródło
Innym rozwiązaniem jest dołączenie obrazu jako załącznika, a następnie odwołanie się do niego w kodzie html za pomocą cid. Kod HTML:
Kod C #:
źródło
źródło
Wszyscy mamy preferowane style kodowania. Oto co zrobiłem:
źródło
Dodałem cały kod poniżej, aby wyświetlać obrazy w Gmailu, Thunderbirdzie i innych klientach poczty e-mail:
źródło