当我将我的网站发布到windows azure时,ELMAH不发送电子邮件并抛出下面的错误。 任何帮助或想法赞赏。谢谢!
注意:
我已正确设置elmah,以便在hostmysite.com上通过smtp发送电子邮件,该邮件在Azure之外进行IIS / .NET托管。 我家里也有一台运行良好的登台服务器。 另外,我尝试过端口25,50,587。 此外,我已经尝试发送到我支付的列表服务器和SendGrid。 在每种情况下,它都适用于我的登台和开发服务器,但不适用于Azure。
ELMAH正在捕获数据库中的错误(Azure中的MS SQL和IIS)。
以下是我的配置设置:
System.Net.NetworkInformation.NetworkInformationExceptionAccess is denied
System.Net.NetworkInformation.NetworkInformationException (0x80004005): Access is denied
at System.Net.NetworkInformation.SystemIPGlobalProperties.GetFixedInfo()
at System.Net.NetworkInformation.SystemIPGlobalProperties.get_FixedInfo()
at System.Net.NetworkInformation.SystemIPGlobalProperties.get_HostName()
**at System.Net.Mail.SmtpClient.Initialize()
at System.Net.Mail.SmtpClient..ctor()
at Elmah.ErrorMailModule.SendMail(MailMessage mail)
at Elmah.ErrorMailModule.ReportError(Error error)**
at Elmah.ErrorSignalEventHandler.Invoke(Object sender, ErrorSignalEventArgs args)
at Elmah.Mvc.HandleErrorAttribute.OnException(ExceptionContext context)
at System.Web.Mvc.ControllerActionInvoker.InvokeExceptionFilters(ControllerContext controllerContext, IList`1 filters, Exception exception)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
...
</httpModules>
<modules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
...
</modules>
<elmah>
<security allowRemoteAccess="yes" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="Elmah.Sql" />
**<errorMail from="errors@domain.com" to="ErrorReport@mydomain.com" subject="[Site][ErrorReport-ELMAH]" async="false" smtpPort="587" smtpServer="stmp.server.com" useSsl="false" userName="user1" password="password1" noYsod="false" />**
</elmah>
答案 0 :(得分:0)
我遇到了类似的问题,并得到了Microsoft支持部门的帮助。显然,在Azure仪表板中从64位切换到32位可以修复它。 64位,它是“访问被拒绝”,32位和电子邮件通过。
好的,显然Azure团队已针对此64位问题进行了修复。 64位和32位对我有用。他们说他们昨天(2013/06/20)部署了修复程序。
答案 1 :(得分:0)
ELMAH(v1.2 SP2)的当前实现只能通过SMTP发送电子邮件,Azure本身不支持该电子邮件。 (可能是因为它会变成一个庞大的垃圾邮件引擎)。
由于ELMAH作为HTTP模块包含在项目中,我实际上必须下载&amp;修改source以处理Exchange Online Web服务以获取在我们的Azure云服务中工作的电子邮件。代码非常干净,因此您只需要修改ErrorMailModule.cs。我添加了相应的web.config输入参数,然后创建了一个新的Send方法,像这样插入它(保留向后兼容性):
ReportError(Error error)
{
...
OnMailing(args);
if (UseExchangeWebServices) //pulled from web.config
{
SendExchangeMail(mail);
}
else
{
SendMail(mail);
}
....
}
//Sample web.config
<elmah>
<errorMail to="WebMaster@sample.com"
subject="Sample - Elmah Exception"
async="true"
exchangeUserName="Admin@sample.onmicrosoft.com"
exchangePassword="supersecretpassword"
autoDiscoverUrl="Admin@sample.onmicrosoft.com"
useExchangeWebServices="true"/>
</elmah>
然后我将代码上传到我们的企业Nuget服务器以方便消费。我之前使用过SendGrid的API,你应该可以做类似的事情。
编辑: 走在前面,在这里添加了NuGet包: http://www.nuget.org/packages/elmah.ews/