c# - mail - Generar archivo HTML en tiempo de ejecución y enviar como archivo adjunto de correo electrónico
enviar correo c# con archivo adjunto (2)
Dado que está utilizando WebForms, recomendaría representar su hoja de registro en un Control como una cadena , y luego adjuntarlo a un MailMessage .
La parte de renderización se vería así:
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();
}
Si tiene controles editables ( TextBox
, DropDownList
, etc.), deberá reemplazarlos por Labels o Literals antes de llamar a GetRenderedHtml()
. Vea esta publicación en el blog para ver un ejemplo completo.
Aquí está el ejemplo de MSDN para los archivos adjuntos :
// 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(
"[email protected]",
"[email protected]",
"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);
Tengo un requisito del proyecto de que debemos adjuntar una hoja de registro con formato HTML a un correo electrónico que se envía a un usuario. No quiero que la hoja de registro sea parte del cuerpo. Prefiero no usar HTMLTextWriter o StringBuilder porque la hoja de registro es bastante compleja.
¿Hay algún otro método que no mencione o una herramienta que lo haga más fácil?
Nota: He trabajado con la clase MailDefinition y he creado una plantilla, pero no he encontrado una manera de hacer esto un archivo adjunto si eso es posible.
Puede usar Razor para plantillas de correo electrónico. RazorEngine o MvcMailer pueden hacer el trabajo por usted
Vistas de afeitar como plantillas de correo electrónico
http://www.codeproject.com/Articles/145629/Announcing-MvcMailer-Send-Emails-Using-ASP-NET-MVC
http://kazimanzurrashid.com/posts/use-razor-for-email-template-outside-asp-dot-net-mvc