【问题标题】:Is it possible to get raw HTML from Razor/Blazor components?是否可以从 Razor/Blazor 组件获取原始 HTML?
【发布时间】:2020-03-08 18:36:44
【问题描述】:

我想使用 MailKit 设置“邮件/新闻通讯”。我的站点堆栈基于 Blazor Web 程序集并使用 .Razor 组件。

我想知道是否有一种方法可以使用我编写的剃须刀组件,以将 HTML 输出到我用来生成电子邮件正文的 MimeMessage 对象中,以及该架构的外观/实现的最佳方式这个?

类似的问题(虽然不是 Blazor):

【问题讨论】:

    标签: razor blazor mailkit mimekit blazor-client-side


    【解决方案1】:

    因为我刚刚看到这个问题,所以迟到了答案:我写了一个名为 BlazorTemplater 的替代系统,它使用 .razor 文件而不是 .cshtml,因为我遇到了这个问题。

    您可以将模板转换为.razor 格式,然后使用BlazorTemplater 呈现为HTML:

    var html = new ComponentRenderer<MyRazorClass>()
       .Set(c => c.SomeParameter = someValue)
       .Render();
    

    它支持参数、DI 注入和嵌套组件,所以你会发现它很有用!在 Razor 类库中设置和工作也更容易。

    【讨论】:

      【解决方案2】:

      我在这里使用带有 MailKit 的 Blazor:Google Email Viewer in Server Side Blazor

      我使用MarkupString 来显示邮件内容如下:

      @using MimeKit
      @using MessageReader
      @strError
      <div style="padding:2px; vertical-align:top">
          <div><i>@MimeKitMessage.Date.ToString()</i></div>
          <div><b>From:</b> @MimeKitMessage.From.ToString()</div>
          <div><b>To:</b> @MimeKitMessage.To.ToString()</div>
          <div><b>Subject:</b> @MimeKitMessage.Subject</div>
          <br />
          <div>@((MarkupString)@htmlEmail)</div>
      </div>
      @code {
          [Parameter] public Message paramMessage { get; set; }
          MimeMessage MimeKitMessage;
          string strError = "";
          string htmlEmail = "";
          protected override void OnInitialized()
          {
              try
              {
                  if (paramMessage != null)
                  {
                      string converted = paramMessage.Raw.Replace('-', '+');
                      converted = converted.Replace('_', '/');
                      byte[] decodedByte = Convert.FromBase64String(converted);
                      using (Stream stream = new MemoryStream(decodedByte))
                      {
                          // Convert to MimeKit from GMail
                          // Load a MimeMessage from a stream
                          MimeKitMessage = MimeMessage.Load(stream);
                          // Convert any embedded images
                          var visitor = new HtmlPreviewVisitor();
                          MimeKitMessage.Accept(visitor);
                          htmlEmail = visitor.HtmlBody;
                          //If the email has attachments we can get them here
                          //var attachments = visitor.Attachments;
                      }
                  }
              }
              catch (Exception ex)
              {
                  strError = ex.Message;
              }
          }    
      }
      

      【讨论】:

      • 我投了反对票,因为我误解了答案。我意识到我的错误,但无法删除反对票。 RIP
      • @AlbatrossCafe - 没问题 :)
      猜你喜欢
      • 2013-07-17
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2015-09-26
      相关资源
      最近更新 更多