Pregunta

Al crear un objeto MailMessage llamando al método "CreateMailMessage" en la clase MailDefinition, el tercer parámetro es un objeto de tipo System.Web.UI.Control.

MailDefinition mail = new MailDefinition();

ListDictionary replacements = new ListDictionary();
replacements.Add("<%myname%>", "John");

mail.BodyFileName = "~/App_Data/Emails/SomeEmail.txt";
mail.From = "me@example.com";
mail.Subject = "Hello";

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, );

¿Por qué?
Y en el caso de que no tengo un objeto de ese tipo, lo que debería pasar en su lugar? Sólo un nuevo objeto de control?

Control control = new Control();

Actualizar

Yo recomendaría el uso de Razor para construir plantillas de correo electrónico. Tiene un gran sintaxis, funciona muy bien, y no tiene ninguna dependencia extraños!

¿Fue útil?

Solución

Por lo general, sólo tiene que pasar this como control.

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);

En cuanto a la razón por la cual, He aquí lo que dice MSDN:

  

El parámetro propietario indica que el control sea el padre del control MailDefinition. Se determina el directorio para buscar el archivo de texto especificado en la propiedad BodyFileName.

Otros consejos

La CreateMailMessage función utiliza internamente el control para consultar su AppRelativeTemplateSourceDirectory propiedad y su método OpenFile para leer el contenido del cuerpo (especificado en el BodyFileName del MailDefinition ).

Parece un mal diseño y estrecho acoplamiento innecesario para mí.

También puede simplemente hacer esto:

MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());

He estado usando new LiteralControl() para la tercera parámetro porque mis mensajes se envían desde un flujo de trabajo. Funciona. Pero no tengo una respuesta para "¿Por qué".

Parece que usted no tenga que utilizar la clase MailDefinition en absoluto si usted no está de unión a ningún control. Para sólo tiene que enviar un correo electrónico a través de SMTP, se debe utilizar un System.Net.Mail.SmtpClient con un System.Net.Mail.MailMessage.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top