【问题标题】:Looking for a good technique for storing email templates寻找一种存储电子邮件模板的好技术
【发布时间】:2011-01-05 23:11:58
【问题描述】:

我正在建立一个网站,我们在其中适度使用电子邮件模板。例如,我们将令牌传递到的 HTML 模板,如 {UserName}、{Email}、{NameFirst} 等。

就最佳实践而言,我正在努力将这些存储在哪里。我将首先展示我采用的方法,我很高兴听到一些专家的观点作为替代方法。

我在名为 /Templates/ 的文件夹中创建了 HTML 模板。

我在我的服务层调用一个静态方法,它接受以下参数:

  1. 用户名
  2. 用户 ID
  3. 电子邮件
  4. 模板路径(“~/模板”)
  5. 电子邮件主题

在服务层中,我有我的静态方法 SendUserEmail(),它使用了一个 Template 类——它接受一个路径,将它作为一个字符串加载,并有一个 AddToken() 方法。

在我的静态 SendUserEmail() 中,我根据方法签名构建令牌列表,然后发送电子邮件。

这在我的实际使用中造成了相当长的方法调用,特别是因为我从 web.config 调用“TemplatePath”和“Email Subject”。我可以创建一个方法调用比 ConfigurationManager.AppSettings 更短的实用程序,但我更担心的是我通常不会看到这么长的方法签名,我觉得这是因为我做错了什么。

这种技术非常适用于我现在拥有的电子邮件,最多使用前 3 个标记。不过未来我会有更多的代币要传入,我只是想知道采取什么方法。

我是否创建特定于需要发送的电子邮件的方法? IE。 SendNewUserRegistration()、SendMarketingMaterial(),每个参数的签名都不一样?

我正在使用 ASP.NET Membership,它可能包含我将需要的所有字段的扩展。主要有三个对象,aspnet_User、aspnet_Mebership 和 aspnet_profile。如果它全部包含在一个对象中,我就会将其传入。传入所有 3 个对象是否存在性能问题,以获得我需要的所有字段?这与仅传递 aspnet_User.UserID、aspnet_User.Email 等相比是什么?

我可以看到传入带有令牌条目的字典,但我只是想知道询问调用页面是否太多?

有没有办法将它们粘贴在它自己的名为 Templates.config 的配置文件中,该文件具有 -

之类的标签
<Templates>
<EmailTemplate Name="New User Registration">
<Tokens>
<UserName>
<UserID>
<Email>
</Tokens>
<Message Subject="Hi welcome...">
   Hi {UserName}...
</Message>
</EmailTemplate>
</Templates>

我想我问的主要原因是因为我很难确定责任应该在哪里,就确定要使用什么模板,以及如何传入参数。如果调用页面必须建立TokenName,TokenValue的字典,可以吗?或者该方法应该将每个作为定义的参数?这在 web.config 中看起来不合适,因为我有 2 个用于 and 的条目,感觉它应该看起来更嵌套。

谢谢。我可以使用任何客观方法的技术或建议来询问我的方法是否可行。

【问题讨论】:

    标签: asp.net templates email


    【解决方案1】:

    首先我建议您使用NVelocity 作为模板引擎。至于主要问题,我认为您可以创建一个抽象类 MailMessage 并为每个需要的消息派生一个(使用唯一模板)。所以你会像下面这样使用它:

    MailMessage message = new UserRegistrationMessage(tokens);
    //some code that sends this message
    

    通过这种方式,您强制每个具体的 XXXMessage 类负责存储模板并使用给定的令牌填充模板。如何处理代币?最简单的方法是在将字典传递给消息之前创建一个字典,这样每个具体的消息类都会知道如何处理传递的字典以及它应该包含哪些标记,但您还需要记住它应该包含哪些标记。另一种方法(我更喜欢它)是创建一个通用抽象类型 TokenSet 并为每个需要的唯一令牌集创建一个派生类型。例如,您可以创建一个 UserMessageTokenSet : TokenSet 和其中的几个属性:

    UserNameToken
    SomeUserProfileDataToken
    

    等等。因此,使用这种方式,您将始终知道应该为每个令牌集设置哪些数据以及
    UserRegistrationMessage 将知道从这个 tokenSet 中获取什么。

    有很多方法可以去。如果您能更好地描述您的任务,我想我会尝试向您建议更具体的内容。但是上面列出了总体思路。希望对你有帮助=)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2011-02-02
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多