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

StackOverflow https://stackoverflow.com/questions/744117

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top