ストリームを使用してメール内のHTMLコンテンツを書きます
-
19-09-2019 - |
質問
私は、輸出から得たHTMLを搭載した流れを持っています。私は(他の方法がありますか?)バイト[]でストリームからこのHTMLを取ることができ、私はHTMLメールの本文にこのバイト[]を書きたい。
これを行う理由は、私はHTMLにレポートをエクスポートし、代わりにPDFファイルにエクスポートするの、メールの本文にこのデータを使用し、添付ファイルとして送信したいということです。
私は何かを追加する必要がある場合は私に知らせて、それは十分に明らかだと思います。
おかげ
解決
私はそれを発見しました。それは私が私がメールに直接フォーマットされた出力を有する、希望の結果を見つけることができませんでしたが、質問は出力HTMLにストリーム内に格納されたバイトを使用する方法の詳細だった、非常に簡単です。
私は、ストリームを取り、StreamReaderを作成します:
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
すると、メールオブジェクトのボディに、私は、StreamReaderをを使用してストリームの内容を読みます:
mail.Body = reader.ReadToEnd();
それはすべてです。あなたはどう思いますか?
他のヒント
あなただけのストリームを閉じたり、メッセージを送信した後までそれをクリーンアップしません、マルチパートMIMEメッセージを使用し、同様にAlternateViewコンストラクタにストリームを渡すことができます(クリーンアップを処理するためにMailMessage.Dispose()を呼び出し)あなたが好きならば、あなたのために。あなたはあなたのソリューションで行く場合は、コンテンツタイプは、それはそれは、プレーンテキストだと思いますので、それ以外の場合は受信側のメールクライアントがHTMLとしてHTMLが表示されない場合があり、正しく設定を取得するためにはtrueにmail.IsBodyHtmlを設定してください。メールの出力は、メールクライアントにおかしい場合、それはおそらく理由です。
コードは(関連部分のみに切り捨て)、次のようになります:
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);