繁体   English   中英

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

[英]Why does the MailDefinition class require a System.Web.UI.Control?

通过在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();

UPDATE

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

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

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

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

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

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

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

你也可以这样做:

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一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM