Ecrire un contenu HTML dans un courrier à l'aide d'un flux
-
19-09-2019 - |
Question
J'ai un flux chargé avec HTML que je suis d'une exportation. Je peux prendre ce html à partir du flux dans un octet [] (est-il une autre façon?), Et je veux écrire cet octet [] à un organisme de messagerie html.
La raison de le faire est que je veux exporter un rapport au format html, et utiliser ces données dans le corps du courrier, au lieu de l'exporter au format PDF et l'envoyer en pièce jointe.
Espérons qu'il est assez clair, laissez-moi savoir si je dois ajouter quelque chose.
Merci
La solution
Je l'ai trouvé. Il est très simple, même si je ne trouve pas le résultat que je voudrais, ayant une sortie formatée directement à la poste, la question était plus sur la façon d'utiliser les octets stockés dans un flux HTML de sortie.
Je prends le flux et crée un StreamReader:
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
Ensuite, dans le corps de l'objet du courrier, je lis le contenu du flux en utilisant StreamReader:
mail.Body = reader.ReadToEnd();
C'est tout. Que pensez-vous?
Autres conseils
Vous pouvez utiliser un message multipart Mime et passer le courant au constructeur de AlternateView ainsi, il suffit de ne pas fermer le flux ou le nettoyer qu'après avoir envoyé le message (appel MailMessage.Dispose () pour gérer le nettoyage pour vous si vous le souhaitez). Si vous allez avec votre solution, assurez-vous de mettre mail.IsBodyHtml à true pour le type de contenu pour obtenir réglé correctement sinon le client de messagerie de réception ne peut pas afficher le code HTML en HTML car il pense qu'il est le texte brut. Si la sortie du courrier semble drôle dans votre client de messagerie alors c'est probablement pourquoi.
Le code ressemblerait à quelque chose comme ceci (tronqué uniquement les parties pertinentes):
MailMessage message = new MailMessage();
message.AlternateViews.Add(new AlternateView(stream, new ContentType("text/HTML"));
// do NOT set Body, IsBodyHtml, or ContentType on MailMessage or
// you'll mess up the mime types
smtpClient.Send(message);