Toon posts:

[C#] Html email met plaatjes, de beste manier?

Pagina: 1
Acties:

Onderwerpen


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 02:01
Ik ben vanuit C# aan het klooien met het versturen van html emails met een plaatje erin, werkt allemaal prima maar ik loop tegen wat eigenaardigheden aan. Ik test de verstuurde email op drie ontvangende platformen (maar uiteindelijk moet het in elke email client gewoon goed zijn):
• Outlook 2010
• Windows Phone 7
• Exchange webmail

Ik zal hieronder (enigszins versimpeld) posten hoe ik het verstuur en wat de problemen zijn.

1:
C#:
1
2
3
4
5
6
7
var mailMessage = new MailMessage("a@b.nl", "a@b.nl", "Test", "Plain text view");
mailMessage.IsBodyHtml = true;
var mimeType = new ContentType("text/html");
string message = "<html><body><img src="http://www.b.nl/image.gif"/></body></html>";
var htmlView = AlternateView.CreateAlternateViewFromString(message, mimeType);
mailMessage.AlternateViews.Add(htmlView);
new SmtpClient("smtpServer").Send(mailMessage);

+ Werkt op alle ontvangende clients
- Ik krijg op alle clients een security warnig en moet handmatig de plaatjes downloaden

2:
C#:
1
2
3
4
5
6
7
8
9
10
var mailMessage = new MailMessage("a@b.nl", "a@b.nl", "Test", "Plain text view");
mailMessage.IsBodyHtml = true;
var mimeType = new ContentType("text/html");
string message = "<html><body><img src="cid:imageKey"/></body></html>";
var htmlView = AlternateView.CreateAlternateViewFromString(message, mimeType);
var linkedResource = new LinkedResource(@"C:\image.gif");
linkedResource.ContentId = "imageKey";
htmlView.LinkedResources.Add(linkedResource);
mailMessage.AlternateViews.Add(htmlView);
new SmtpClient("smtpServer").Send(mailMessage);

+ Werkt perfect in Outlook en Exchange webmail
- Werkt niet op Windows Phone 7

3:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var mailMessage = new MailMessage("a@b.nl", "a@b.nl", "Test", "Plain text view");
mailMessage.IsBodyHtml = true;
var mimeType = new ContentType("text/html");
string message = "<html><body><img src="cid:imageKey"/></body></html>";
var htmlView = AlternateView.CreateAlternateViewFromString(message, mimeType);
var inline = new Attachment(@"C:\image.gif");
inline.ContentDisposition.Inline = true;
inline.ContentDisposition.DispositionType = DispositionTypeNames.Inline;
inline.ContentId = "imageKey";
inline.ContentType.MediaType = "image/gif";
inline.ContentType.Name = "image.gif";
mailMessage.Attachments.Add(inline);
mailMessage.AlternateViews.Add(htmlView);
new SmtpClient("smtpServer").Send(mailMessage);

+ Werkt perfect in Outlook en op Windows Phone 7
- Werkt weer niet in Exchange webmail

Dus tsja, wat moet ik nou? Het liefst heb ik het op alle platformen gewoon goed werken. Mis ik nog iets?

Roomba E5 te koop


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 30-05 10:08
Ik zou me niet blind staren op het feit dat het niet op windows phone 7 werkt. In oktober komt de Mango update, en het zou goed kunnen dat het dan ineens wel werkt.

Overigens wordt methode 1 (en 2) het meest gebruikt omdat de methode met ContentDisposition onbetrouwbaar is i.v.m andere afhandeling tussen email clients.

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:22

MueR

Moderator Devschuur®

is niet lief

Dit probleem ga je niet tof oplossen. Plaatjes (en andere data) moeten altijd expliciet toestemming krijgen wanneer ze vanaf een externe locatie binnengehaald moeten worden. Mocht je daar om heen kunnen werken hoop ik dat het snel gepatched wordt. Ik zit er namelijk niet op te wachten dat er allerlei automatische tracking wordt gedaan via een plaatje.

Attachment images werken vaak niet op webmail, om dezelfde reden. De webmail client zal altijd weigeren iets te tonen wat mogelijk de client kan borken.

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 30-05 10:08
MueR schreef op vrijdag 24 juni 2011 @ 14:20:
Dit probleem ga je niet tof oplossen. Plaatjes (en andere data) moeten altijd expliciet toestemming krijgen wanneer ze vanaf een externe locatie binnengehaald moeten worden. Mocht je daar om heen kunnen werken hoop ik dat het snel gepatched wordt. Ik zit er namelijk niet op te wachten dat er allerlei automatische tracking wordt gedaan via een plaatje.

Attachment images werken vaak niet op webmail, om dezelfde reden. De webmail client zal altijd weigeren iets te tonen wat mogelijk de client kan borken.
Mja dat ook inderdaad. Ik ging eigenlijk automatisch al voorbij aan dat:
- Ik krijg op alle clients een security warnig en moet handmatig de plaatjes downloaden
een minpunt is :+

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 02:01
Als je plaatje in een LinkedResource zit kan het niet gebruikt worden om te tracken toch? Dus ook geen security warning nodig. Ik hou het voorlopig wel op methode 2, leek mij ook de netste.

Roomba E5 te koop


  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 29-05 10:02

CoolGamer

What is it? Dragons?

Misschien helpt het als je bij de LinkedResource ook het mime-type opgeeft. Nu laat je die parameter weg. Hij maakt er standaard application/octet-stream van, terwijl het eigenlijk in dit geval image/gif moet zijn.

[Voor 59% gewijzigd door CoolGamer op 24-06-2011 23:01]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee