MailDefinition 클래스에 System.web.ui.control이 필요한 이유는 무엇입니까?
-
09-09-2019 - |
문제
MailDefinition 클래스에서 "CreateMailMessage"메소드를 호출하여 MailMessage 객체를 작성할 때 세 번째 매개 변수는 Type 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의 말은 다음과 같습니다.
소유자 매개 변수는 어떤 컨트롤이 우편 검색 제어의 부모인지 나타냅니다. BodyFilename 속성에 지정된 텍스트 파일을 검색 할 디렉토리를 결정합니다.
다른 팁
그만큼 CreateMailmessage 기능은 내부적으로 지정된 것을 사용합니다 제어 쿼리 authRelativeTemplatesourcedirectory 재산과 그 오픈 파일 신체의 내용을 읽는 방법 ( 바디 필레나 의 속성 우편 검색).
나에게는 디자인이 좋지 않고 불필요한 꽉 조여진 것 같습니다.
당신은 또한 이것을 할 수 있습니다 :
MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
나는 사용하고있다 new LiteralControl()
내 메시지가 워크 플로에서 전송되기 때문에 세 번째 매개 변수의 경우. 효과가있다. 그러나 나는 "왜"에 대한 답이 없습니다.
컨트롤에 구속력이없는 경우 MailDefinition 클래스를 전혀 사용할 필요가 없을 것 같습니다. SMTP를 통해 이메일을 보내려면 system.net.mail.mailmessage와 함께 System.net.mail.smtpclient를 사용해야합니다.