为什么MailDefinition类需要System.Web.UI.Control?
-
09-09-2019 - |
题
当创建通过调用MailDefinition类“CreateMailMessage”方法的对象MAILMESSAGE,第三个参数是类型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属性指定的文本文件的目录。
其他提示
的 CreateMailMessage 强>函数在内部使用指定的控制以查询其的 AppRelativeTemplateSourceDirectory 强>属性和它的的OpenFile 方式来读取所述主体的所述内容(在 BodyFileName 强>的属性中指定的 MailDefinition 强>)。
似乎设计不良的和不必要的紧耦合我。
您也可以只做到这一点:
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。
不隶属于 StackOverflow