为什么MailDefinition类需要System.Web.UI.Control?

时间:2009-04-13 14:44:35

标签: c# asp.net mailmessage

通过在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 control = new Control();

更新

我强烈建议您使用Razor来构建电子邮件模板。它具有很好的语法,效果很好,并且没有任何奇怪的依赖!

5 个答案:

答案 0 :(得分:5)

通常您只需将this作为控件传递。

MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);

至于here is what MSDN says:

的原因
  

owner参数指示哪个控件是MailDefinition控件的父控件。它确定搜索BodyFileName属性中指定的文本文件的目录。

答案 1 :(得分:3)

CreateMailMessage 函数在内部使用指定的控件来查询其 AppRelativeTemplateSourceDirectory 属性及其 OpenFile 方法以进行读取正文的内容(在 MailDefinition BodyFileName 属性中指定)。

对我来说,似乎设计不佳,不必要的紧耦合。

答案 2 :(得分:2)

你也可以这样做:

MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());

答案 3 :(得分:1)

我一直在使用new LiteralControl()作为第3个参数,因为我的消息是从工作流发送的。有用。但我对“为什么”没有答案。

答案 4 :(得分:0)

如果您没有绑定任何控件,听起来根本不需要使用MailDefinition类。要简单地通过smtp发送电子邮件,您应该将System.Net.Mail.SmtpClient与System.Net.Mail.MailMessage一起使用。