gpt4 book ai didi

vb.net - log4net smtpappender 自定义电子邮件收件人

转载 作者:行者123 更新时间:2023-12-02 09:36:07 24 4
gpt4 key购买 nike

我能够使用 log4net 将日志信息发送到使用 VB 解决方案 (Visual Studio 2010) 中的 smtpappender 和 Gmail 帐户的电子邮件地址。收件人是在 log4net 配置文件中配置的,但是我希望能够动态更改收件人电子邮件地址。

是否可以无需编写自定义 smtpappender?

无论答案是肯定还是否定,请给我一个例子,最好是用VB编写的。

最佳答案

不可能,当前的 SmtpAppender 不允许。但你很幸运,SmtpAppender 中的 SendBuffer 可以被重写,因此你可以轻松地向其添加一些行为。我认为最好的选择是使用 LoggingEvent 属性来设置收件人:

public class MySmtpAppender : SmtpAppender
{
protected override void SendBuffer(log4net.Core.LoggingEvent[] events)
{
var Recipients = events
.Where(e => e.Properties.Contains("recipient"))
.Select(e => e.Properties["recipient"])
.Distinct();
var RecipientsAsASingleLine = string.Join(";", Recipients.ToArray()); // or whatever the separator is
var PreviousTo = To;
To = RecipientsAsASingleLine;
base.SendBuffer(events);
To = PreviousTo;
}
}

您可能想要更改选择收件人、通话的方式。

编辑 The tool recommended by stuartd工作得很好(嗯,它一个相当简单的类,但仍然):

Public Class MySmtpAppender
Inherits SmtpAppender
Protected Overrides Sub SendBuffer(events As log4net.Core.LoggingEvent())
Dim Recipients = events.Where(Function(e) e.Properties.Contains("recipient")).[Select](Function(e) e.Properties("recipient")).Distinct()
Dim RecipientsAsASingleLine = String.Join(";", Recipients.ToArray())
' or whatever the separator is
Dim PreviousTo = [To]
[To] = RecipientsAsASingleLine
MyBase.SendBuffer(events)
[To] = PreviousTo
End Sub
End Class

关于vb.net - log4net smtpappender 自定义电子邮件收件人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26054072/

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