Почему класс MailDefinition требует System.Web.UI.Control? - PullRequest
14 голосов
/ 13 апреля 2009

При создании объекта 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 = "me@example.com";
mail.Subject = "Hello";

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

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

Control control = new Control();

UPDATE

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

Ответы [ 5 ]

5 голосов
/ 13 апреля 2009

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

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

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

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

3 голосов
/ 26 января 2012

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

Кажется, плохой дизайн и ненужная жесткая связь для меня.

2 голосов
/ 26 февраля 2015

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

MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
1 голос
/ 28 июля 2010

Я использовал new LiteralControl() для 3-го параметра, потому что мои сообщения отправляются из рабочего процесса. Оно работает. Но у меня нет ответа на вопрос «почему».

0 голосов
/ 13 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...