Генерация HTML-файла во время выполнения и отправка в виде вложения электронной почты - PullRequest
1 голос
/ 07 февраля 2012

У меня есть требование к проекту, что нам нужно прикрепить журнал в формате HTML к электронному письму, которое отправляется пользователю. Я не хочу, чтобы лист журнала был частью тела. Я бы не хотел использовать HTMLTextWriter или StringBuilder, потому что лист журнала довольно сложен.

Есть ли другой метод, который я не упоминаю, или инструмент, который бы облегчил эту задачу?

Примечание. Я работал с классом MailDefinition и создал шаблон, но у меня нетнашел способ сделать это вложением, если это вообще возможно.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2012

Поскольку вы используете WebForms, я бы порекомендовал отобразить ваш журнал в элементе управления в виде строки , а затем , прикрепив его к MailMessage .

Часть рендеринга будет выглядеть примерно так:

public static string GetRenderedHtml(this Control control)
{
    StringBuilder sbHtml = new StringBuilder();
    using (StringWriter stringWriter = new StringWriter(sbHtml))
    using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter))
    {
        control.RenderControl(textWriter);
    }
    return sbHtml.ToString();
}

Если у вас есть редактируемые элементы управления (TextBox, DropDownList и т. Д.), Вам необходимо заменить их на Метки или Литералы перед вызовом GetRenderedHtml(). См. этот блог для полного примера.

Вот пример MSDN для вложений :

// Specify the file to be attached and sent.
// This example assumes that a file named Data.xls exists in the
// current working directory.
string file = "data.xls";
// Create a message and set up the recipients.
MailMessage message = new MailMessage(
   "jane@contoso.com",
   "ben@contoso.com",
   "Quarterly data report.",
   "See the attached spreadsheet.");

// Create  the file attachment for this e-mail message.
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);
...