Вы можете использовать сообщение Multipart Mime и передавать поток также в конструктор AlternateView, просто не закрывайте поток и не очищайте его до тех пор, пока вы не отправите сообщение (вызов MailMessage.Dispose () для очистки для вас, если хотите). Если вы используете свое решение, убедитесь, что для mail.IsBodyHtml установлено значение true, чтобы тип содержимого был установлен правильно, иначе принимающий почтовый клиент может не отображать HTML как HTML, так как он будет считать его простым текстом. Если вывод почты выглядит забавно в вашем почтовом клиенте, возможно, поэтому.
Код будет выглядеть примерно так (урезано только до соответствующих частей):
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);