log 4net SMTP Appender не работает с учетной записью office365 / office.com - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь использовать приложение SMTP Log 4net для программы, которую я создаю. У меня есть несколько приложений (консоль и файл), которые работают нормально; тем не менее, мой SmtpAppender работает неправильно. При попытке запустить мое приложение я получаю следующее (из-за использования key = "log 4net .Internal.Debug" value = "true"):

ErrorCode: GenericFailure. Error occurred while sending e-mail notification.
System.Net.Mail.SmtpException: The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM [XXXXXXX.XXXXX.prod.outlook.com]

Мой файл app.config настроен ниже :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>
    <log4net>
        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date{ABSOLUTE} [%logger] [%type.%method:%line] %level - %message%newline%exception"/>
            </layout>
        </appender>
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="..\..\Logs\MyLogs.log"/>
            <appendToFile value="true"/>
            <rollingStyle value="Size"/>
            <maximumFileSize value="10MB"/>
            <maxSizeRollBackups value="10"/>
            <staticLogFileName value="true"/>
            <preserveLogFileNameExtension value="true"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date{ABSOLUTE} [%logger] [%type.%method:%line] %level - %message%newline%exception"/>
            </layout>
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        </appender>
        <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net">
            <to value="myusername@mycompanyemail"/>
            <from value="myusername@mycompanyemail"/>
            <subject value="Error Log"/>
            <smtpHost value="smtp.office365.com"/>
            <port value="587"/>
            <username value="myusername@mycompanyemail"/>
            <password value="mypassword"/>
            <enableSsl value="true"/>
            <bufferSize value="1"/>
            <lossy value="false"/>
            <evaluator type="log4net.Core.LevelEvaluator,log4net">
                <threshold value="DEBUG"/> <!--For testing purposes only-->
                <!--<threshold value="WARN"/>-->
            </evaluator>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date{ABSOLUTE} [%logger] [%type.%method:%line] %level - %message%newline%exception" />
            </layout>
        </appender>
        <root>
            <level value="DEBUG"/>
            <appender-ref ref="ConsoleAppender"/>
            <appender-ref ref="RollingFileAppender"/>
            <appender-ref ref="SmtpAppender"/>
        </root>
    </log4net>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Я не уверен, что мне не хватает, чтобы заставить это работать. Я знаю, что наши учетные записи office.com позволят это сделать, если настроены правильно. У меня есть следующая программа в powershell, которая прекрасно работает:

$SMTP_SERVER = "smtp.office365.com";
$MY_EMAIL = "myusername@mycompanyemail";
$PORT = "587";
$passwd = "mypassword";
$secpasswd = ConvertTo-SecureString $passwd -AsPlainText -Force;
$mycreds = New-Object System.Management.Automation.PSCredential $email_address, $secpasswd;


## Email Settings
$to_addr = $MY_EMAIL;
$from_addr = $MY_EMAIL;
$subject = "Test email from Powershell";
$body = "This is a test email sent from Powershell";

send-mailmessage -smtpserver $SMTP_SERVER -port $PORT -UseSsl -Credential $mycreds -from $from_addr -to $to_addr -subject $subject -body $body;

Любая помощь будет принята с благодарностью.

...