Question

Lors de la création d'un objet de MailMessage en appelant la méthode « CreateMailMessage » de la classe de MailDefinition, le troisième paramètre est un objet de type 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, );

Pourquoi est-ce?
Et dans le cas où je n'ai pas un objet de ce type, que dois-je passer à la place? Juste un nouvel objet de contrôle?

Control control = new Control();

UPDATE

Je recommande fortement d'utiliser pour construire des modèles de courriel. Il a une grande syntaxe, fonctionne très bien, et ne pas avoir de dépendances étranges!

Était-ce utile?

La solution

En général, vous venez de passer this comme le contrôle.

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

En ce qui concerne la raison pour laquelle, ici est ce que dit MSDN:

  

Le paramètre propriétaire indique que le contrôle est le parent du contrôle MailDefinition. Il détermine dans quel répertoire pour rechercher le fichier texte spécifié dans la propriété BodyFileName.

Autres conseils

CreateMailMessage fonction utilise en interne la Contrôle pour interroger son AppRelativeTemplateSourceDirectory propriété et de son OpenFile Procédé pour lire le contenu du corps (spécifié dans le BodyFileName de MailDefinition ).

Semble mauvaise conception et le couplage serré inutile pour moi.

Vous pouvez également faire ceci:

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

J'utilise new LiteralControl() pour le 3ème paramètre parce que mes messages sont envoyés à partir d'un flux de travail. Ça marche. Mais je n'ai pas de réponse pour « Pourquoi ».

On dirait que vous ne pouvez pas besoin d'utiliser la classe MailDefinition du tout si vous n'êtes pas se lier à aucun contrôle. Pour envoyer simplement un e-mail sur smtp, vous devez utiliser un System.Net.Mail.SmtpClient avec un System.Net.Mail.MailMessage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top