diff --git a/README.md b/README.md
index 1ea55ad..d996df5 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@ Send email with:
* [Console app](https://github.com/resend/resend-dotnet/tree/master/examples/ConsoleNoDi) - Send email from console app (without dependency injection)
* [Async - Hangfire](https://github.com/resend/resend-dotnet/tree/master/examples/AsyncHangfire) - Send email as a background job using [Hangfire](https://www.hangfire.io/)
* [Async - Temporal](https://github.com/resend/resend-dotnet/tree/master/examples/AsyncTemporal) - Send email in durable workflow using [Temporal](https://temporal.io/)
+* [Render - Razor](https://github.com/resend/resend-dotnet/tree/master/examples/RenderRazor) - Render an HTML body using Razor views
Setup
diff --git a/examples/RenderRazor/Controllers/EmailController.cs b/examples/RenderRazor/Controllers/EmailController.cs
new file mode 100644
index 0000000..ce77109
--- /dev/null
+++ b/examples/RenderRazor/Controllers/EmailController.cs
@@ -0,0 +1,148 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Abstractions;
+using Microsoft.AspNetCore.Mvc.ModelBinding;
+using Microsoft.AspNetCore.Mvc.Razor;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using Microsoft.AspNetCore.Mvc.ViewFeatures;
+using Microsoft.AspNetCore.Mvc.ViewFeatures.Infrastructure;
+using RenderRazor.Views.Email;
+using Resend;
+using System.Text;
+
+namespace RenderRazor.Controllers;
+
+///
+[ApiController]
+public class EmailController : ControllerBase
+{
+ private readonly ILogger _logger;
+ private readonly IRazorViewEngine _razor;
+ private readonly IServiceProvider _services;
+ private readonly IResend _resend;
+
+
+ ///
+ public EmailController( IRazorViewEngine razor, IServiceProvider services, IResend resend, ILogger logger )
+ {
+ _razor = razor;
+ _services = services;
+ _resend = resend;
+ _logger = logger;
+ }
+
+
+ ///
+ [HttpGet]
+ [Route( "email/render" )]
+ public async Task EmailRender()
+ {
+ var html = await RenderEmail( "Hello", new HelloModel()
+ {
+ DisplayName = "John Doe",
+ Items = { "NodeJs", "Go", "and many more..." },
+ SenderName = "Resend Team",
+ } );
+
+ return html;
+ }
+
+
+ ///
+ [HttpGet]
+ [Route( "email/send" )]
+ public async Task EmailSend()
+ {
+ /*
+ *
+ */
+ var html = await RenderEmail( "Hello", new HelloModel()
+ {
+ DisplayName = "John Doe",
+ Items = { "NodeJs", "Go", "and many more..." },
+ SenderName = "Resend Team",
+ } );
+
+
+ /*
+ *
+ */
+ var message = new EmailMessage();
+ message.From = "you@domain.com";
+ message.To.Add( "user@gmail.com" );
+ message.Subject = "Hello from Render Razor";
+ message.HtmlBody = html;
+
+ var resp = await _resend.EmailSendAsync( message );
+
+ _logger.LogInformation( "Sent email, with Id = {EmailId}", resp.Content );
+
+ return resp.Content.ToString();
+ }
+
+
+
+ ///
+ public async Task RenderEmail( string view, T model )
+ {
+ /*
+ *
+ */
+ var viewEngineResult = _razor.GetView( "~/Views/Email/", $"{view}.cshtml", false );
+
+ if ( viewEngineResult == null )
+ throw new ApplicationException( "View not found" );
+
+ if ( viewEngineResult.Success == false )
+ throw new ApplicationException( "View failed" );
+
+
+ /*
+ *
+ */
+ var actionContext = GetActionContext();
+
+
+ /*
+ *
+ */
+ var sb = new StringBuilder();
+
+ using ( var sw = new StringWriter( sb ) )
+ {
+ var tempDataSerializer = (TempDataSerializer) _services.GetService( typeof( TempDataSerializer ) )!;
+ var tempDataProvider = new SessionStateTempDataProvider( tempDataSerializer );
+
+ var viewContext = new ViewContext(
+ actionContext,
+ viewEngineResult.View,
+ new ViewDataDictionary(
+ metadataProvider: new EmptyModelMetadataProvider(),
+ modelState: new ModelStateDictionary()
+ )
+ {
+ Model = model
+ },
+ new TempDataDictionary( actionContext.HttpContext, tempDataProvider ),
+ sw,
+ new HtmlHelperOptions()
+ );
+
+ await viewEngineResult.View.RenderAsync( viewContext );
+ }
+
+
+ return sb.ToString();
+ }
+
+
+ ///
+ private ActionContext GetActionContext()
+ {
+ var httpContext = new DefaultHttpContext
+ {
+ RequestServices = _services
+ };
+
+ return new ActionContext( httpContext, new RouteData(), new ActionDescriptor() );
+ }
+}
diff --git a/examples/RenderRazor/Pages/Error.cshtml b/examples/RenderRazor/Pages/Error.cshtml
new file mode 100644
index 0000000..6f92b95
--- /dev/null
+++ b/examples/RenderRazor/Pages/Error.cshtml
@@ -0,0 +1,26 @@
+@page
+@model ErrorModel
+@{
+ ViewData["Title"] = "Error";
+}
+
+
Error.
+
An error occurred while processing your request.
+
+@if (Model.ShowRequestId)
+{
+
+ Request ID:@Model.RequestId
+
+}
+
+
Development Mode
+
+ Swapping to the Development environment displays detailed information about the error that occurred.
+
+
+ The Development environment shouldn't be enabled for deployed applications.
+ It can result in displaying sensitive information from exceptions to end users.
+ For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
+ and restarting the app.
+