【问题标题】:Assign HTML file to Message.Body in c#在 C# 中将 HTML 文件分配给 Message.Body
【发布时间】:2015-11-29 02:26:24
【问题描述】:

我想将一个完整的 HTML 文件分配给电子邮件正文,我想将此文件分配给邮件正文,我输入:

message.IsBodyHtml = true;

我可以用它来逐行分配

"Welcome to our system",
"<b>Thanks to join to our system !<br /><br />",

但是有没有办法将一个完整的 HTML 文件分配给正文?我有一个包含电子邮件正文设计的 HTML 文件。

希望清楚。 提前致谢

【问题讨论】:

  • AppPath 在 Silverlight 中不存在?
  • AppPath 是存储Request.PhysicalApplicationPath的变量名。
  • "请求在当前上下文中不存在",我在 Silverlight 应用程序上工作!我不知道如何给出文本文件的路径:(
  • 我认为在 Silverlight 中应该是这样的:string AppPath = Path.Combine(Environment.CurrentDirectory, @"EmailTemplates\", EmailTemplate.txt);
  • " 不允许文件操作。访问路径 '' 被拒绝。"这让我发疯了

标签: c# html html-email


【解决方案1】:

您应该创建一个EmailTemplate

  • 将新文件夹添加到您的项目中,例如EmailTemplates
  • 将新文本文件添加到EmailTemplates 文件夹,例如EmailTemplate.txt
  • EmailTemplate.txt 中编写您的 HTML 模板
  • 然后在代码中:

    string AppPath = Request.PhysicalApplicationPath;
    StreamReader sr = new StreamReader(AppPath + "EmailTemplates/EmailTemplate.txt");
    message.IsBodyHtml = true;
    message.Body = sr.ReadToEnd();
    sr.Close();
    

【讨论】:

    【解决方案2】:

    只需将文件添加到您的项目资源中:

    项目属性 > 资源 > 添加现有文件

    在代码中使用:Resources.ResourceName

    【讨论】:

      【解决方案3】:

      我最喜欢的方式是使用 T4 模板。

      您创建 T4 模板文件

      <#@ template language="C#" #>
      <#@ assembly name="System.Core" #>
      <#@ import namespace="System.Linq" #>
      <#@ import namespace="System.Text" #>
      <#@ import namespace="System.Collections.Generic" #>
      <#@ parameter name="Email" type="System.String" #>
      <p>Here is text for <#= Email #></p>
      

      然后您可以在发送邮件之前处理模板

      MyTemplate template = new MyTemplate 
      {
         Session = new Dictionary<string, object>
         {
            { "Email", "some@email.com" }
         }
      };
      
      template.Initialize();
      string body = template.TransformText();
      

      最后使用您的 html 正文发送电子邮件

      MailMessage message = new MailMessage(this.emailConfiguration.SmtpUser, email)
      {
         IsBodyHtml = true,
         Body = body,
         Subject = "Your email subject"
      };
      

      对于两种(html 正文/文本正文)情况,我都更喜欢这种解决方案,因为:

      • 模板是干净的并且作为解决方案的一部分
      • 您可以将自定义变量添加到模板中

      【讨论】:

      • 感谢您的回答,我想问一下如何在Silverlight应用程序中获取模板文件的路径?
      • 如果你添加了T4模板文件,VS会自动生成你的模板对应的.cs文件。这意味着,如果您创建 MyTemplate.tt 文件,您可以将其实例化为 MyTemplate.cs (new MyTemplate {...})
      • 如何在 silverlight 中添加 T4 模板?
      • Silverlight 中的 T4:blogs.clariusconsulting.net/kzu/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2012-03-08
      • 2017-04-04
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多