Почему для класса MailDefinition требуется System.Web.UI.Control?

При создании объекта MailMessage, вызвав метод "CreateMailMessage" в классе MailDefinition, третий параметр является объектом типа 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 = "[email protected]";
mail.Subject = "Hello";

MailMessage message = mail.CreateMailMessage("[email protected],", replacements, );

Почему это? И в том случае, если у меня нет объекта такого типа, что мне передать? Просто новый объект управления?

Control control = new Control();

UPDATE

Я бы очень рекомендовал использовать Razor для создания шаблонов электронной почты. Он имеет отличный синтаксис, отлично работает и не имеет каких-либо странных зависимостей!

Ответы

Ответ 1

Обычно вы просто передаете this в качестве элемента управления.

MailMessage message = mail.CreateMailMessage("[email protected],", replacements, this);

Что касается причины, вот что говорит MSDN:

Параметр owner указывает, какой элемент управления является родительским элементом элемента управления MailDefinition. Он определяет, какой каталог ищет текстовый файл, указанный в свойстве BodyFileName.

Ответ 2

Функция CreateMailMessage внутренне использует указанный элемент управления для запроса свойства AppRelativeTemplateSourceDirectory и метода OpenFile для чтения содержимое тела (указанное в свойстве BodyFileName MailDefinition).

Кажется, что для меня плохая конструкция и ненужная плотная муфта.

Ответ 3

Вы также можете просто сделать это:

MailMessage message = this.Mail.CreateMailMessage("[email protected]", dictionary, new System.Web.UI.Control());

Ответ 4

Я использовал new LiteralControl() для третьего параметра, потому что мои сообщения отправляются из Workflow. Оно работает. Но у меня нет ответа "Почему".

Ответ 5

Похоже, вам не обязательно вообще использовать класс MailDefinition, если вы не привязываетесь к каким-либо элементам управления. Чтобы просто отправить сообщение по smtp, вы должны использовать System.Net.Mail.SmtpClient с System.Net.Mail.MailMessage.