MvcMailer
MvcMailer copied to clipboard
godaddy - Security Exception when embedded image inlined
I've got this error on godaddy hosting, only. It works correct on my internal server. I've created simple template with three images included as described on https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide
But it seems that Godaddy has strong security restriction and this call
Mvc.Mailer.LinkedResourceProvider.GetContentType(String fileName) +53
wan't work…
Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.
Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.RegistryPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SecurityException: Request for the permission of type 'System.Security.Permissions.RegistryPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) +31
System.Security.CodeAccessPermission.Demand() +46
Microsoft.Win32.RegistryKey.CheckPermission(RegistryInternalCheck check, String item, Boolean subKeyWritable, RegistryKeyPermissionCheck subKeyCheck) +9629642
Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +70
Microsoft.Win32.RegistryKey.OpenSubKey(String name) +6
Mvc.Mailer.LinkedResourceProvider.GetContentType(String fileName) +53
Mvc.Mailer.LinkedResourceProvider.Get(String contentId, String filePath) +34
Mvc.Mailer.LinkedResourceProvider.GetAll(Dictionary`2 resources) +168
Mvc.Mailer.MailerBase.PopulateLinkedResources(AlternateView mailPart, Dictionary`2 resources) +101
Mvc.Mailer.MailerBase.PopulateHtmlPart(MailMessage mailMessage, String viewName, String masterName, Dictionary`2 linkedResources) +48
Mvc.Mailer.MailerBase.PopulateBody(MailMessage mailMessage, String viewName, String masterName, Dictionary`2 linkedResources) +160
Mvc.Mailer.MailerBase.PopulateBody(MailMessage mailMessage, String viewName, Dictionary`2 linkedResources) +18
Navtran.Web.WebSite.Mailers.UserMailer.UserInvitation(UserInvitation userInvitation) in UserMailer.cs:46
WebSite.Controllers.UserAccountController.SendInvitation(UserInvitation userInvitation) in UserAccountController.cs:71
lambda_method(Closure , ControllerBase , Object[] ) +86
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +188
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +56
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +267
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +20
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +190
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +329
System.Web.Mvc.Controller.ExecuteCore() +115
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +94
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +31
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +23
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +59
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8897857
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
Looks like you hit an edge case. Didn't see this error before. One quick workaround: You can plugin an implementation of the LinkedResourceProvider that doesn't use this line. This line is used to set the content type for the linked resource.
On Tue, Sep 13, 2011 at 12:20 PM, m-tretyak < [email protected]>wrote:
I've got this error on godaddy hosting, only. It works correct on my internal server. I've created simple template with three images included as described on https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide
But it seems that Godaddy has strong security restriction and this call
Mvc.Mailer.LinkedResourceProvider.GetContentType(String fileName) +53
wan't work
Security Exception Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file. Exception Details: System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.RegistryPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [SecurityException: Request for the permission of type 'System.Security.Permissions.RegistryPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.] System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0 System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) +31 System.Security.CodeAccessPermission.Demand() +46 Microsoft.Win32.RegistryKey.CheckPermission(RegistryInternalCheck check, String item, Boolean subKeyWritable, RegistryKeyPermissionCheck subKeyCheck) +9629642 Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +70 Microsoft.Win32.RegistryKey.OpenSubKey(String name) +6 Mvc.Mailer.LinkedResourceProvider.GetContentType(String fileName) +53 Mvc.Mailer.LinkedResourceProvider.Get(String contentId, String filePath) +34 Mvc.Mailer.LinkedResourceProvider.GetAll(Dictionary`2 resources) +168 Mvc.Mailer.MailerBase.PopulateLinkedResources(AlternateView mailPart, Dictionary`2 resources) +101 Mvc.Mailer.MailerBase.PopulateHtmlPart(MailMessage mailMessage, String viewName, String masterName, Dictionary`2 linkedResources) +48 Mvc.Mailer.MailerBase.PopulateBody(MailMessage mailMessage, String viewName, String masterName, Dictionary`2 linkedResources) +160 Mvc.Mailer.MailerBase.PopulateBody(MailMessage mailMessage, String viewName, Dictionary`2 linkedResources) +18 Navtran.Web.WebSite.Mailers.UserMailer.UserInvitation(UserInvitation userInvitation) in UserMailer.cs:46 WebSite.Controllers.UserAccountController.SendInvitation(UserInvitation userInvitation) in UserAccountController.cs:71 lambda_method(Closure , ControllerBase , Object[] ) +86 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +188 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +56 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +267 System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +20 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +190 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +329 System.Web.Mvc.Controller.ExecuteCore() +115 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +94 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10 System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37 System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55 System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +31 System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +23 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +59 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8897857 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NETVersion:4.0.30319.1
Reply to this email directly or view it on GitHub: https://github.com/smsohan/MvcMailer/issues/25
Thank you, Sir! :) I've done something like this. If you would so kind to include this (like a patch?)
public virtual ContentType GetContentType(string fileName)
{
var ext = (Path.GetExtension(fileName) ?? "*").ToLowerInvariant();
var contentType = string.Empty;
try
{
//possible security exception here
var regKey = Registry.ClassesRoot.OpenSubKey(ext);
if (regKey != null)
{
var obj = regKey.GetValue("Content Type");
if (obj != null) contentType = obj.ToString();
}
}
catch
{
contentType = string.Empty;
}
if (string.IsNullOrEmpty(contentType))
{
switch (ext)
{
case ".png":
contentType = "image/png";
break;
case ".bmp":
contentType = "image/bmp";
break;
case ".exe":
contentType = "application/x-msdownload";
break;
case ".htm":
case ".html":
contentType = "text/html";
break;
case ".txt":
contentType = "text/plain";
break;
default:
contentType = "application/octet-stream";
break;
}
}
return new ContentType(contentType);
}