通过在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来构建电子邮件模板。它具有很好的语法,效果很好,并且没有任何奇怪的依赖!
答案 0 :(得分:5)
通常您只需将this
作为控件传递。
MailMessage message = mail.CreateMailMessage("example@example.com,", replacements, this);
的原因
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一起使用。