2017-10-10 4 views
0

J'ai essayé d'obtenir un code HTML et de traduire le code du rasoir dans une chaîne pour envoyer et envoyer un courriel à plusieurs utilisateurs. Les e-mails sont planifiés par Quartz et envoyés aux utilisateurs. Le courrier génère un lien via @Url.Action. Je remarque que je n'ai pas un Controller ni HttpContext à ce stade sur ma demande. J'ai essayé un moyen de traduire le code razor (RazorEngine et MvcMailer) à une chaîne et l'envoi dans l'e-mail, mais sans utilisation parce que je ne peux pas traduire le @Url.Action et ne peut pas trouver un paquet de travail MvcMailer pour Visual Studio 2017rasoir html à la chaîne en utilisant Quartz

Existe-t-il un moyen de faire cela?

Voici le modèle de l'Email:

Hi @ViewBag.RecipientName, 

Client that buy this item is @Model.ClientName 
<p> <a href='@Url.Action("Index", "Item", new { ItemId = Model.ItemId}, Request.Url.Scheme)'>Click here to check the Item</a> </p> 

@ViewBag.RecipientEmailAddress 

Voici le générateur email

public MailMessage GetMessage(EmailModel notification) 
{ 

    string BodyTemplate = ReplaceEmailBody(notification); 

    return new MailMessage 
    { 
     To = { "[email protected]" }, 
     Subject = DateTime.Now.ToString(), 
     IsBodyHtml = true, 
     Body = BodyTemplate 
    }; 
} 

Voici ma tentative de déchets pour remplacer le rasoir:

private string ReplaceEmailBody(EmailModel notification) 
    { 
     string notificationBody = ""; 

     notificationBody = Templates.Resources.MailTemplate; 

     notificationBody = notificationBody.Replace("@ViewBag.RecipientName", notification.RecipientName); 
     notificationBody = notificationBody.Replace("@ViewBag.RecipientEmailAddress", notification.RecipientEmailAddress); 
     notificationBody = notificationBody.Replace("@Model.CLIENT_NAME", notification.ClientName); 

     //Need to replace the Url.Action 
    } 

Tout cela le code est en cours d'exécution dans un travail d'exécution de Quartz

J'utilise Visual Studio 2017

+1

Vous pouvez fournir l'url (action du contrôleur mvc) à votre service de quartz qui sera appelé pour générer un courrier électronique rasoir (et éventuellement l'envoyer). –

+0

@StanislavNedeljkovic Et comment puis-je faire cela? – Ragmar

+1

Si l'URL est statique, placez-la dans le fichier de configuration, si elle est dynamique, envoyez-la en tant que paramètre de travail. –

Répondre

0

Comme @Stanislav Nedeljkovic suggéré, je mets l'URL d'un fichier de configuration et réussi à créer et HttpContext avec elle. Ensuite, je pourrais traduire le reste avec RazorEngine.

 var request = new HttpRequest("/", ConfigFile.Url, ""); 
     var response = new HttpResponse(new StringWriter()); 
     httpContext = new HttpContext(request, response); 


     var httpContextBase = new HttpContextWrapper(httpContext); 
     var routeData = new RouteData(); 
     var requestContext = new RequestContext(httpContextBase, routeData); 

     var urlHelper = new UrlHelper(requestContext); 
     var url = urlHelper.Action("Index", "Item", new { ItemId = model.itemId});