Почему для класса 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.