Почему классу MailDefinition требуется System.Web.UI.Control?
-
09-09-2019 - |
Вопрос
При создании объекта 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();
ОБНОВЛЯТЬ
Я очень рекомендую использовать Бритва для создания шаблонов электронной почты.У него отличный синтаксис, он отлично работает и не имеет каких-либо странных зависимостей!
Решение
Обычно ты просто проходишь this
в качестве контроля.
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);
Что касается причины, почему, вот что говорит MSDN:
Параметр владельца указывает, какой элемент управления является родительским для элемента управления MailDefinition.Он определяет, в каком каталоге искать текстовый файл, указанный в свойстве BodyFileName.
Другие советы
А СоздатьMailMessage функция внутренне использует указанный Контроль запросить его AppRelativeTemplateSourceDirectory собственность и ее Открыть файл метод для чтения содержимого тела (указан в ИмяФайла Тела собственность MailОпределение).
Мне кажется плохой дизайн и ненужная тесная связь.
Вы также можете просто сделать это:
MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
я использовал new LiteralControl()
для третьего параметра, потому что мои сообщения отправляются из рабочего процесса.Оно работает.Но у меня нет ответа на вопрос «Почему».
Похоже, вам вообще не понадобится использовать класс MailDefinition, если вы не привязываетесь к каким-либо элементам управления.Чтобы просто отправить электронное письмо через smtp, вам следует использовать System.Net.Mail.SmtpClient с System.Net.Mail.MailMessage.