是否可以从 Razor/Blazor 组件中获取原始 HTML?
Is it possible to get raw HTML from Razor/Blazor components?
我想使用 MailKit 设置 "mailer/newsletter"。我的站点堆栈基于 Blazor Web 程序集并使用 .Razor 组件。
我想知道是否有一种方法可以使用我编写的 razor 组件,将 HTML 输出到我用来生成电子邮件正文的 MimeMessage 对象中,以及该架构的外观/ 实现此目标的最佳方法?
类似问题(虽然不是 Blazor):
- Can I use an ASP.Net MVC Razor view to generate an nicely formatted HTML Body as the input for an email sent from the server?
我在这里使用 Blazor 和 MailKit: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;
}
}
}
因为我刚看到这个问题所以回答晚了:我写了一个名为 BlazorTemplater 的替代系统,它使用 .razor
文件而不是 .cshtml
因为我遇到了这个问题。
您可以将模板转换为 .razor
格式,然后使用 BlazorTemplater 呈现为 HTML:
var html = new ComponentRenderer<MyRazorClass>()
.Set(c => c.SomeParameter = someValue)
.Render();
它支持参数、DI 注入和嵌套组件,所以您应该会发现它很有用!在 Razor Class 库中设置和工作也更容易。
我想使用 MailKit 设置 "mailer/newsletter"。我的站点堆栈基于 Blazor Web 程序集并使用 .Razor 组件。
我想知道是否有一种方法可以使用我编写的 razor 组件,将 HTML 输出到我用来生成电子邮件正文的 MimeMessage 对象中,以及该架构的外观/ 实现此目标的最佳方法?
类似问题(虽然不是 Blazor):
- Can I use an ASP.Net MVC Razor view to generate an nicely formatted HTML Body as the input for an email sent from the server?
我在这里使用 Blazor 和 MailKit: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;
}
}
}
因为我刚看到这个问题所以回答晚了:我写了一个名为 BlazorTemplater 的替代系统,它使用 .razor
文件而不是 .cshtml
因为我遇到了这个问题。
您可以将模板转换为 .razor
格式,然后使用 BlazorTemplater 呈现为 HTML:
var html = new ComponentRenderer<MyRazorClass>()
.Set(c => c.SomeParameter = someValue)
.Render();
它支持参数、DI 注入和嵌套组件,所以您应该会发现它很有用!在 Razor Class 库中设置和工作也更容易。