1

当我将我的网站发布到 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>
4

2 回答 2

0

当前的 ELMAH (v1.2 SP2) 实现只能通过 SMTP 发送电子邮件,Azure 本身不支持这种方式。(可能是因为它会变成一个巨大的垃圾邮件引擎)。

由于 ELMAH 作为 HTTP 模块包含在项目中,因此我实际上必须下载和修改来处理 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/

于 2014-01-09T21:52:41.683 回答
0

我遇到了类似的问题,并从 Microsoft 支持部门获得了帮助。显然,在 Azure 仪表板中从 64 位切换到 32 位可以解决此问题。64 位,它是“拒绝访问”,32 位和电子邮件通过。

好的,显然 Azure 团队为这个 64 位问题推出了修复程序。64 位和 32 位适用于我。他们说他们昨天(2013/06/20)部署了修复程序。

于 2013-06-20T16:19:16.333 回答