Domanda

Quando si crea un oggetto MailMessage chiamando il metodo "CreateMailMessage" sulla classe MailDefinition, il terzo parametro è un oggetto di 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, );

Perché?
E nel caso che non ho un oggetto di questo tipo, che cosa devo passare, invece? Solo un nuovo oggetto di controllo?

Control control = new Control();

Aggiorna

Mi raccomando utilizzando Razor per costruire modelli di posta elettronica. Ha grandi sintassi, grandi opere, e non ha alcuna dipendenza strani!

È stato utile?

Soluzione

Di solito è sufficiente passare this come il controllo.

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

Per quanto riguarda il motivo per cui, Ecco cosa MSDN dice:

  

Il parametro Proprietario indica quale controllo è il padre del controllo MailDefinition. Essa determina quale directory per cercare il file di testo specificato nella proprietà BodyFileName.

Altri suggerimenti

CreateMailMessage funzione utilizza internamente specificato Controllo per visualizzare lo AppRelativeTemplateSourceDirectory proprietà e il suo OpenFile metodo per leggere il contenuto del corpo (specificati nel BodyFileName di proprietà del MailDefinition ).

Sembra cattiva progettazione e accoppiamento stretto inutile per me.

È anche possibile fare questo:

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

Sono stato con new LiteralControl() per il 3 ° parametro, perché i miei messaggi sono stati inviati da un flusso di lavoro. Funziona. Ma io non ho una risposta per "Why".

Sembra che potrebbe non essere necessario utilizzare la classe MailDefinition a tutti se non stai vincolante per eventuali controlli. Per inviare semplicemente una e-mail tramite SMTP, è necessario utilizzare uno System.Net.Mail.SmtpClient con uno System.Net.Mail.MailMessage.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top