gpt4 book ai didi

azure - ELMAH - 从 Azure 应用程序设置获取 SMTP 凭据

转载 作者:行者123 更新时间:2023-12-03 19:08:04 25 4
gpt4 key购买 nike

我有一个使用 ELMAH 的 Azure Web 应用程序记录未处理的异常。

当我第一次部署它时,web.config 中定义了完整的 SMTP 设置,并且 ELMAH 通过电子邮件发送了异常(exception)情况:

<system.net>
<mailSettings>
<smtp from="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ae7efcae7f3eee5e7ebe3e4a4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>">
<network host="smtp.mailprovider.com"
port="123"
userName="myUserName"
password="p@ssw0rd" />
</stmp>
</mailSettings>
</system.net>

用户名和密码已从 web.config 中删除,现在存储为应用程序设置,通过 Azure 门户进行配置。

我发送的大多数电子邮件仍然可以正常工作,因为电子邮件代码可以访问这些应用程序设置并在实例化 SmtpClient 时使用它们,例如:

var userName = WebConfigurationManager.AppSettings["smtp.userName"];
var password = WebConfigurationManager.AppSettings["smtp.password"];

var credentials = new NetworkCredential(userName, password);

using (var smtpClient = new SmtpClient { Credentials = credentials })
{
await smtpClient.SendMailAsync(mailMessage);
}

让 ELMAH 使用应用程序设置中存储的凭据的最佳方法是什么?

我可以看到的选项:

  • 有一个page wiki 上解释了如何使用 ELMAH 的 ErrorTweetModule 来执行 HTTP 表单发布,并将错误详细信息发送到任何 URL。然后,接收帖子的控制者可以使用存储的凭据通过电子邮件发送详细信息。
  • WebBase 有一个指向 article 的链接建议您可以直接将电子邮件发送到收件人的 SMTP 服务器而无需身份验证,但它说如果您设置了 DomainKeys,则这可能不起作用,我就是这样做的。
  • 这个answer链接到 article关于拦截 Mailing 事件以自定义消息。

最佳答案

我最终创建了 Elmah 的 ErrorMailModule 的自定义版本,该版本源自标准版本,但根据 Atif Aziz 在 a discussion 中的一些建议重写了 SendMail 方法Google 网上论坛。

唯一需要的更改是创建新模块,并将 Web.Config 切换为使用自定义模块而不是标准模块。

<小时/>

模块

using System;
using System.Net.Mail;

namespace Test
{
public class ErrorMailModule : Elmah.ErrorMailModule
{
protected override void SendMail(MailMessage mail)
{
if (mail == null) throw new ArgumentNullException(nameof(mail));

// do what you want with the mail
// (in my case this fires up the email service, which
// gets the credentials from the Azure settings)
}
}
}
<小时/>

网络配置更改

所需要做的就是将两次出现的 Elmah.ErrorLogModule, Elmah 更改为您自己的模块,在本例中为 Test.ErrorMailModule

所以,而不是这个......

<system.web>
<httpModules>
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
</modules>
</system.webServer>

...你现在应该有这个:

<system.web>
<httpModules>
<add name="ErrorMail" type="Test.ErrorMailModule" />
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="ErrorMail" type="Test.ErrorMailModule" preCondition="managedHandler" />
</modules>
</system.webServer>

您仍然需要 errorMail 部分,因为 Elmah 仍然负责创建电子邮件。我的看起来像这样:

<elmah>
<errorMail from="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="047177617644606b69656d6a2a676b69" rel="noreferrer noopener nofollow">[email protected]</a>" to="use<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90e2d0f4fffdf1f9febef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>" subject="Custom Email Module"/>
</elmah>

关于azure - ELMAH - 从 Azure 应用程序设置获取 SMTP 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com