2017-01-03 41 views
10

znalazłem to rozwiązanie do wyświetlania obrazu w korpusie email: Add image to body of an emailJak usunąć zdjęcie jako załącznik, ale wykazują w organizmie email

i działa dobrze, ale również dodaje obraz jako załącznik do e-mail.

Attachment inlineLogo = new Attachment(EmailLogo.ImageUrl); 
mailMsg.Attachments.Add(inlineLogo); 
string contentID = "Image"; 
inlineLogo.ContentId = contentID; 

//To make the image display as inline and not as attachment 
inlineLogo.ContentDisposition.Inline = true; 
inlineLogo.ContentDisposition.DispositionType = DispositionTypeNames.Inline; 

//To embed image in email 
mailMsg.Body = "<htm><body> <img height=\"49\" width=\"169\" src=\"cid:" + contentID + "\"> </body></html>"; 

Jest linia kodu z komentarzem wyświetlać jako inline, a nie jako załącznik, ale linia ta nie działa, ponieważ obraz jest nadal zostaje dołączony do wiadomości e-mail:

//To make the image display as inline and not as attachment 
inlineLogo.ContentDisposition.Inline = true; 
inlineLogo.ContentDisposition.DispositionType = DispositionTypeNames.Inline; 

Jak można Zatrzymuję obraz przed dołączeniem do e-maila?

+1

Proszę zobaczyć ten wpis: http://stackoverflow.com/questions/18358534/send-inline-image-in-email – Creep

+1

jest L brakuje ' literówkę w' mailMsg.Body = " ";' linia, czy jest obecna w głównej aplikacji? – Takarii

+1

Spójrz na [ten post] (http://stackoverflow.com/a/32767496/3110834) dla niektórych opcji. –

Odpowiedz

1

Alternatywą, która może być używana do osadzania obrazu w linii, ale również nie jest na ogół filtrowana przez klientów poczty e-mail, jest (co zwykle ma miejsce dzisiaj w przypadku wiadomości śmieciowych). Można użyć DataURL.

<img src="data:image/<type>;base64,<string>"/> 

gdzie <type> jest typ obrazu, czyli jpg, gif, png, a jest ciągiem base64. Wystarczy przekonwertować obraz na ciąg base64 i przypisać go do źródła przy użyciu powyższej składni

Na przykład, z jpeg ...

mailMsg.Body = "<html><body> <img height=\"49\" width=\"169\" src=\"data:image/jpg;base64,<myPictureString>"\"> </body></html>"; 
3

Zastosowanie AlternateView do przechowywania kodu HTML z obrazem osadzony jako LinkedResource :

string contentID = "Image"; 

var inlineLogo = new LinkedResource(EmailLogo.ImageUrl, "image/png");  
inlineLogo.ContentId = contentID; 

var htmlView = AlternateView.CreateAlternateViewFromString(
    "<html><body> <img height=\"30\" width=\"30\" src=\"cid:" + contentID + "\"> </body></html>", 
    Encoding.UTF8, "text/html"); 
htmlView.TransferEncoding = TransferEncoding.QuotedPrintable; 
htmlView.LinkedResources.Add(inlineLogo); 

mailMsg.AlternateViews.Add(htmlView); 

PS Osadzanie obrazu jako łańcucha base24 nie jest dobrym pomysłem, ponieważ wielu klientów pocztowych nie obsługuje takiej zdolności.

1

Jeśli chcesz wyświetlić obraz w wiadomości e-mail, musi on gdzieś istnieć. Jest on dołączony jako część ładunku wiadomości (bez względu na to, czy jest "wyświetlany w wierszu", czy jako prawdziwy "załącznik") - lub jest pobierany ze zdalnego serwera WWW, gdy czytnik czyta wiadomość e-mail (i opcjonalnie musi wybrać opcję „zobacz zdjęcia”)

nie aby dołączyć obraz do samego ładunku email:

  1. masz gospodarzem obraz na serwerze WWW publicznego tak, że czytelnik otwierając wiadomość do niego dostęp.
  2. Musisz użyć w pełni kwalifikowanego adresu URL w swoim źródle treści wiadomości, aby mógł go znaleźć.

Zakładając zapisaniu obrazu na serwerze WWW pod następującym adresem URL: http://www.example.com/images/myimage.jpg

... to źródło powinno po prostu zmienić, aby odzwierciedlić:

mailMsg.Body = "<html><body> <img height=\"49\" width=\"169\" src=\"http://www.example.com/images/myimage.jpg\"> </body></html>"; 

Nie trzeba dołączać to w ogóle.