14

通过调用 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来构建电子邮件模板。它有很好的语法,很好用,而且没有任何奇怪的依赖!

4

5 回答 5

5

通常你只是this作为控制传递。

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

至于原因,这里是 MSDN 所说的:

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

于 2009-04-13T14:51:22.413 回答
3

CreateMailMessage函数在内部使用指定的Control来查询它的AppRelativeTemplateSourceDirectory属性和它的OpenFile方法来读取正文的内容(在 MailDefinition 的BodyFileName属性中指定)。

对我来说,这似乎是糟糕的设计和不必要的紧密耦合。

于 2012-01-26T11:19:01.090 回答
2

你也可以这样做:

MailMessage message = this.Mail.CreateMailMessage("no-reply@example.com", dictionary, new System.Web.UI.Control());
于 2015-02-26T20:59:23.553 回答
1

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

于 2010-07-28T00:25:53.867 回答
0

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

于 2009-04-13T15:01:03.780 回答