it-swarm.com.de

Rasiermesserseite als E-Mail-Vorlage

Ich habe eine E-Mail-Vorlage von Razor Syntax entworfen. Wenn ich diese Vorlage als E-Mail mit C # -Code und SMTP-Protokoll versende, erhalte ich blanko Razor- und HTML-Markups als E-Mail-Text. Bin ich falsch in dieser Herangehensweise? Sind Rasiermesser-Seiten als E-Mail-Vorlage zulässig? 

Hier ist meine Seite

@inherits ViewPage
@{
Layout = "_Layout";
ViewBag.Title = "";
}
<div class="container w-420 p-15 bg-white mt-40">
<div style="border-top:3px solid #22BCE5">&nbsp;</div>
<span style="font-family:Arial;font-size:10pt">
    Hello <b>{UserName}</b>,<br /><br />
    Thanks for Registering to XYZ Portal<br /><br />
    <a style="color:#22BCE5" href="{Url}">Click to Confirm Email</a><br />

    <br /><br />
    Thanks<br />
    Admin (XYZ)
</span>

Aktualisieren..

 using (StreamReader reader = new StreamReader(HttpContext.Current.Server.MapPath("~/ContentPages/EmailConfTemplate.cshtml")))
  {
     body = reader.ReadToEnd();
     //Replace UserName and Other variables available in body Stream
     body = body.Replace("{UserName}", FirstName);

  }

Später ersetze ich den SMTP-Code als ..

  MailMessage message = new MailMessage(
    ApplicationWideData.fromEmailId, // From field
    ToEmailId, // Recipient field
    "Click On HyperLink To Verify Email Id", // Subject of the email message
    body
   );
11
Lara

E-Mail-Nachrichten verstehen nur zwei Formate: Nur-Text und HTML. Da Razor keiner von beiden ist, muss es von einer Engine verarbeitet werden, damit Sie den generierten HTML-Code zurückgeben können.

Genau das passiert, wenn Sie Razor in ASP.NET MVC im Hintergrund verwenden. Die Razor-Datei wird in eine interne C # -Klasse kompiliert, die ausgeführt wird. Das Ergebnis der Ausführung ist der String-Inhalt des HTML-Codes, der an den Client gesendet wird.

Ihr Problem ist, dass Sie möchten, dass diese Verarbeitung ausgeführt wird, nur um den HTML-Code als Zeichenfolge zurückzugeben, anstatt an den Browser gesendet zu werden. Danach können Sie mit dem HTML-String alles tun, was Sie möchten, einschließlich des Versands als E-Mail.

Es gibt mehrere Pakete, die diese Leistung enthalten, und ich habe Westwind.RazorHosting erfolgreich verwendet, aber Sie können auch RazorEngine mit ähnlichen Ergebnissen verwenden. Ich würde RazorHosting für eigenständige Nicht-Webanwendungen und RazorEngine für Webanwendungen bevorzugen

Hier ist eine (bereinigte) Version meines Codes. Ich verwende Westwind.RazorHosting, um rasiermessergerechte E-Mails von einem Windows-Dienst mit einer stark typisierten Ansicht zu senden.

RazorFolderHostContainer Host = = new RazorFolderHostContainer();
Host.ReferencedAssemblies.Add("NotificationsManagement.dll");
Host.TemplatePath = templatePath;
Host.Start();
string output = Host.RenderTemplate(template.Filename, model);

MailMessage mm = new MailMessage { Subject = subject, IsBodyHtml = true };
mm.Body = output;
mm.To.Add(email);

var smtpClient = new SmtpClient();
await smtpClient.SendMailAsync(mm);
17
SWeko

Haben Sie sich MVC Mailer angesehen?

Es ist ein kostenloses Paket von GitHub ( https://github.com/smsohan/MvcMailer ).

Es gibt auch eine Schritt-für-Schritt-Anleitung https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

Es ist auch auf Nuget. https://www.nuget.org/packages/MvcMailer

Im Wesentlichen wird es Ihre Rasiereransicht in HTML analysieren. 

3
Darren

Schauen Sie sich einen Rasierer-Prozessor wie RazorEngine ( https://razorengine.codeplex.com/ ) an, der auf NuGet verfügbar ist. Es verarbeitet Rasiermesser, um eine Ausgabe zu erstellen, die Sie dann als Hauptteil Ihrer E-Mail verwenden würden.

1
Chris Disley

Das Projekt Mailzory ist eine wertvolle und bequeme Wahl für das Senden von E-Mails mit Razor-Vorlagen.

// template path
var viewPath = Path.Combine("Views/Emails", "hello.cshtml");
// read the content of template and pass it to the Email constructor
var template = File.ReadAllText(viewPath);

var email = new Email(template);

// set ViewBag properties
email.ViewBag.Name = "Johnny";
email.ViewBag.Content = "Mailzory Is Funny";

// send email
var task = email.SendAsync("[email protected]", "subject");
task.Wait()

dieses Projekt wird bei Github gehostet. Es gibt auch ein nuget-Paket für Mailzory.

0
Ehsan Mirsaeedi

Sie benötigen keine speziellen Bibliotheken, um eine Razor-Ansicht in einer Zeichenfolge in einer ASP.NET-MVC-Anwendung darzustellen.

So machen Sie es in MVC 5

public static class ViewToStringRenderer
{
    public static string RenderViewToString<TModel>(ControllerContext controllerContext, string viewName, TModel model)
    {
        ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(controllerContext, viewName, null);
        if (viewEngineResult.View == null)
        {
            throw new Exception("Could not find the View file. Searched locations:\r\n" + viewEngineResult.SearchedLocations);
        }
        else
        {
            IView view = viewEngineResult.View;

            using (var stringWriter = new StringWriter())
            {
                var viewContext = new ViewContext(controllerContext, view, new ViewDataDictionary<TModel>(model), new TempDataDictionary(), stringWriter);
                view.Render(viewContext, stringWriter);

                return stringWriter.ToString();
            }
        }
    }
}

Dann vom Controller

ViewToStringRenderer.RenderViewToString(this.ControllerContext, "~/Views/Emails/MyEmailTemplate.cshtml", model);

Nachdem Sie den E-Mail-Inhalt erhalten haben, können Sie die E-Mail einfach mit MailMessage und SmtpClient versenden.

0
Bassem