【问题标题】:Why does the MailDefinition class require a System.Web.UI.Control?为什么 MailDefinition 类需要 System.Web.UI.Control?
【发布时间】:2010-10-19 03:36:45
【问题描述】:

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

【问题讨论】:

  • 你为什么不使用 MailMessage message = new MailMessage()?

标签: c# asp.net mailmessage


【解决方案1】:

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

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

至于原因,here is what MSDN says:

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

【讨论】:

  • 如果我不是从 ASPX 页面运行,而是从 APP_CODE 类运行呢?
  • 那么您需要将当前控件的引用传入创建邮件消息的代码中。
【解决方案2】:

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

【讨论】:

  • 基本上,我使用 MailDefinition 类来替代它。
  • Razor engine IMO 是新的最佳实践方式。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 确实!但是随着 Razor 模板引擎的出现,它不再重要了 :P razorengine.codeplex.com 以防你一直生活在一块石头下:)
    • @JohnBubriski 我可以在 ASP.NET WebForms 应用程序中使用 RazorEngine 吗?
    【解决方案5】:

    你也可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2018-06-18
      相关资源
      最近更新 更多