与RazorEngine同时发送电子邮件时出错

本文关键字:电子邮件 出错 RazorEngine | 更新日期: 2023-09-27 18:26:40

我们有一个类库,可以使用RazorEngine解析电子邮件内容,并使用web API客户端发送电子邮件。

我们使用它通过控制台应用程序定期发送时事通讯。这非常有效,因为它每天可以发送5万封以上的电子邮件。

我们还使用它从我们的网络应用程序发送电子邮件(例如,用户创建帐户后的验证电子邮件)。

我们使用的是静态方法Razor.Parse()

大约13%的电子邮件发送会产生以下错误。

Cannot access a disposed object Object name: 'TypeLoader', source : RazorEngine, stackTrace :    
at RazorEngine.Templating.TypeLoader.CreateInstance(Type type) 
in RazorEngine''src''Core''RazorEngine.Core''Templating''TypeLoader.cs:line 55
at RazorEngine.Templating.DefaultActivator.CreateInstance(InstanceContext context) 
in RazorEngine''src''Core''RazorEngine.Core''Templating''DefaultActivator.cs:line 20
at RazorEngine.Templating.TemplateService.CreateTemplate(String razorTemplate, Type templateType, Object model) 
in RazorEngine''src''Core''RazorEngine.Core''Templating''TemplateService.cs:line 131
at RazorEngine.Templating.TemplateService.Parse(String razorTemplate, Object model, DynamicViewBag viewBag, String cacheName) 
in RazorEngine''src''Core''RazorEngine.Core''Templating''TemplateService.cs:line 435

这似乎是因为同时发送了多封电子邮件(我们发送的其他电子邮件不会产生此错误)

任何帮助都将不胜感激,因为我们不知道这是从哪里来的。

与RazorEngine同时发送电子邮件时出错

我们有同样的错误,但在RunCompile上。经过一些实验,我们从同一个TemplateServiceConfiguration为每封电子邮件重新创建了RazorEngineService。虽然后者不是IDisposable,但它中的某些东西是

每次重新创建TemplateServiceConfiguration,就在创建RazorEngineService之前解决了问题。然而,重用RazorEngineService也是如此。显然,一旦处理了RazorEngineServiceTemplateServiceConfiguration中的某些内容也会被处理掉。

因此,如果您要发送多封电子邮件,请为每封邮件创建TemplateServiceConfigurationRazorEngineService,或者同时创建一次并重复使用它们。