简体   繁体   English

Logback SMTPAppender 不发送电子邮件

[英]Logback SMTPAppender not sending email

I am attempting to use Logback for logging in my java application.我正在尝试使用 Logback 登录我的 Java 应用程序。 I believe I have it correctly configured, but when an error is logged我相信我已经正确配置了它,但是当记录错误时

INFO in ch.qos.logback.classic.net.SMTPAppender[EMAIL] - About to send out SMTP message "Testing Main" to [XXXX@optonline.net] ch.qos.logback.classic.net.SMTPAppender[EMAIL] 中的信息 - 即将向 [XXXX@optonline.net] 发送 SMTP 消息“Testing Main”

is printed to the console, nothing else is printed after that, and the email is never received.打印到控制台,此后不会打印任何其他内容,并且永远不会收到电子邮件。 If I enter an invalid smtp host or username/password in the config it fails immediately on attempting to send, so it is establishing a connection.如果我在配置中输入无效的 smtp 主机或用户名/密码,它会在尝试发送时立即失败,因此它正在建立连接。

My POM:我的POM:

 <repositories>
    <repository>
    <id>Java.Net</id>
    <url>http://download.java.net/maven/2/</url>
    </repository>
  </repositories>
  <dependencies>

            <dependency>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
                <version>1.1.1</version>
            </dependency>


             <dependency>
                 <groupId>javax.mail</groupId>
                 <artifactId>mail</artifactId>
                 <version>1.4.7</version>
             </dependency>

            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.1</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.1</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.6</version>
            </dependency>


            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.6</version>
            </dependency>


         </dependencies>

logback.xml登录文件

<configuration>
    <!-- dump status message on the console as they arrive -->
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <smtpHost>mail.optonline.net</smtpHost>
        <username>xxxxx</username>
        <password>xxxxxx</password>
        <smtpPort>587</smtpPort>
        <to>xxxxx@optonline.net</to>
        <from>xxxxx@optonline.net</from>
        <subject>Testing %logger
        {20}

        - %m</subject>

        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d
                {HH:mm:ss.SSS}

                [%thread] %-5level %logger
                {1}

                -%msg%n
            </pattern>
        </layout>
    </appender>

    <root level="info">
        <appender-ref ref="EMAIL" />
    </root>
</configuration>

The console控制台

10:45:44,596 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
10:45:44,596 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
10:45:44,596 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/C:/Users/xxxxx/workspace/logback-test/target/classes/logback.xml]
10:45:44,650 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
10:45:44,658 |-INFO in ch.qos.logback.core.joran.action.StatusListenerAction - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
10:45:44,673 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.net.SMTPAppender]
10:45:44,688 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [EMAIL]
10:45:44,765 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
10:45:44,765 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [EMAIL] to Logger[ROOT]
10:45:44,766 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
10:45:44,767 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@ddc652f - Registering current configuration as safe fallback point
10:45:44,774 |-INFO in ch.qos.logback.classic.net.SMTPAppender[EMAIL] - SMTPAppender [EMAIL] is tracking [1] buffers
exiting
10:45:44,791 |-INFO in ch.qos.logback.classic.net.SMTPAppender[EMAIL] - About to send out SMTP message "Testing Main" to [xxxxx@optonline.net]
10:45:44,791 |-INFO in ch.qos.logback.classic.net.SMTPAppender[EMAIL] - About to send out SMTP message "Testing Main" to [xxxxx@optonline.net]

This is the code that is running to produce my test errors这是正在运行以产生我的测试错误的代码

logger.error("Entering app");
logger.error("exiting app");

System.out.println("exiting");

Any help debugging this issue would be greatly appreciated Thank you任何调试此问题的帮助将不胜感激 谢谢

I also faced this issue and found the solution.我也遇到了这个问题并找到了解决方案。 To run the above code, you have to make some changes in your configuration:要运行上面的代码,您必须对配置进行一些更改:

  1. Add <STARTTLS>true</STARTTLS>添加<STARTTLS>true</STARTTLS>
  2. Add <asynchronousSending>false</asynchronousSending>添加<asynchronousSending>false</asynchronousSending>

It seems to have been an issue with the SMTP server I was using.我使用的 SMTP 服务器似乎有问题。 I setup Papercut as a local smtp server and I can see it receive the messages我将 Papercut 设置为本地 smtp 服务器,我可以看到它收到消息

If you are using the gmail for sending the emails then following logback configurations worked for me.如果您使用 gmail 发送电子邮件,那么以下 logback 配置对我有用。

<springProperty scope="context" name="smtpHost" source="spring.mail.host" />
    <springProperty scope="context" name="smtpPort" source="spring.mail.port" />
    <springProperty scope="context" name="username" source="spring.mail.username" />
    <springProperty scope="context" name="password" source="spring.mail.password" />

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
    <smtpHost>${smtpHost}</smtpHost>
    <smtpPort>${smtpPort}</smtpPort>
    <SSL>true</SSL>
    <username>${username}</username>
    <password>${password}</password>
    <to>${username}</to>
    <from>${username}</from>
    <subject>Error From ERP: %logger{20} - %m</subject>

    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
        <!-- only 5 log entries on email -->
        <bufferSize>5</bufferSize>
    </cyclicBufferTracker>
</appender>

While my configurations exists in application.yaml file which can be seen I am trying to fetch them from there.虽然我的配置存在于 application.yaml 文件中,可以看到我试图从那里获取它们。 smtp port is set to 465 in my case.在我的情况下,smtp 端口设置为465

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM