【问题标题】:Having troubles sending emails from spring boot application从 Spring Boot 应用程序发送电子邮件时遇到问题
【发布时间】:2018-02-21 13:30:16
【问题描述】:

我一直在尝试通过 Spring Boot 发送电子邮件,但似乎无法成功。我已经使用 javamail api 很长时间了,但想将 springboot 与 spring mail 一起使用。

public class SendMail {

    @Autowired
    private JavaMailSender javaMailSender;

    public void sendingMail(String to, String subject, String body) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(body);
        javaMailSender.send(message);
    }

}

这是我的邮件

@Controller
public class ExamPle {

    @Autowired
    private SendMail  sendMail;

    @RequestMapping("/he")
    public String homePage() {
        sendMail.sendingMail("bobobush007@gmail.com", "Welcome George", "Sample Message here");
        return "Sent";
        }
}

我的 pom 文件中已经有 sprint-boot-starter-mail,但我不断收到此错误消息。我什至看过有关如何执行此操作的教程的 youtube 视频,但它不起作用。我正在使用 Spring Tool Suite 版本:3.9.0.RELEASE。

属性文件

spring.mail.host=smtp.gmail.com
spring.mail.username=my-email-address
spring.mail.password=my-password
spring.mail.port=587
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.defaultEncoding=UTF-8

2017-09-14 05:25:57.811 信息 12576 --- [主要] com.example.demo.EmaildemoApplication : 开始 带有 PID 12576 的 Georges-MacBook-Pro.local 上的 EmaildemoApplication (由 /Users/georgetebo/STS Projects/Emaildemo 中的 georgetebo 开始) 2017-09-14 05:25:57.814 信息 12576 --- [主要] com.example.demo.EmaildemoApplication :没有活动的配置文件集, 回退到默认配置文件:默认 2017-09-14 05:25:57.845 信息 12576 --- [主要] ationConfigEmbeddedWebApplicationContext:刷新 org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3d3fcdb0: 启动日期 [Thu Sep 14 05:25:57 WAT 2017];上下文层次的根 2017-09-14 05:25:58.652 信息 12576 --- [主要] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat 初始化为 端口:8080 (http) 2017-09-14 05:25:58.662 INFO 12576 --- [
main] o.apache.catalina.core.StandardService : 启动服务 [Tomcat] 2017-09-14 05:25:58.662 INFO 12576 --- [主要] org.apache.catalina.core.StandardEngine :启动 Servlet 引擎: Apache Tomcat/8.5.20 2017-09-14 05:25:58.714 信息 12576 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]: 初始化 Spring 嵌入式 WebApplicationContext 2017-09-14 05:25:58.714 信息 12576 --- [ost-startStop-1] os.web.context.ContextLoader:根 WebApplicationContext: 初始化在 871 毫秒内完成 2017-09-14 05:25:58.821 INFO 12576 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean:映射 servlet:'dispatcherServlet' 到 [/] 2017-09-14 05:25:58.823 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean :映射过滤器: 'characterEncodingFilter' 到:[/] 2017-09-14 05:25:58.824 INFO 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean:映射过滤器:“hiddenHttpMethodFilter”到:[/] 2017-09-14 05:25:58.824 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean :映射过滤器: 'httpPutFormContentFilter' 到:[/] 2017-09-14 05:25:58.824 信息 12576 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : 映射过滤器:“requestContextFilter”到:[/] 2017-09-14 05:25:58.848 警告 12576 --- [主要] ationConfigEmbeddedWebApplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“example”的 bean 时出错:不满足的依赖关系 通过字段“sendMail”表示;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 'com.example.demo.SendMail' 类型的合格 bean 可用: 预计至少有 1 个 bean 有资格作为 autowire 候选者。 依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 2017-09-14 05:25:58.850 信息 12576 --- [主要] o.apache.catalina.core.StandardService :停止服务 [Tomcat] 2017-09-14 05:25:58.861 信息 12576 --- [主要] utoConfigurationReportLoggingInitializer:

启动 ApplicationContext 时出错。显示自动配置 报告启用“调试”后重新运行您的应用程序。 2017-09-14 05:25:58.927 错误 12576 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter:

***************************应用程序启动失败


说明:

com.example.demo.Example 中的字段 sendMail 需要一个 bean 类型 'com.example.demo.SendMail' 找不到。

行动:

考虑在你的 配置。

这是我的 Pom 文件

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.mailsender</groupId>
<artifactId>MailSender</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>MailSender</name>
<description>ZemoPoint for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

我已经卸载了我的 jdk 以及 STS 并安装了新副本。现在我收到此错误

【问题讨论】:

  • 检查你的 pom 文件,看看 javax.mail 是否被意外标记为“提供”;因此它在运行时丢失
  • 请发布您的 pom.xml 文件的内容。没有它,很难确定为什么会出现此错误。
  • @spiritwalker @g00glen00b 按要求添加 pom 文件。
  • 这很奇怪,我使用的代码完全相同,但没有遇到此错误。我认为您的 IDE 中一定有问题。您可以尝试使用 Maven 运行它吗? (在命令行执行mvn spring-boot:run
  • 我尝试了新安装的 eclipse 和 STS,但仍然遇到同样的错误。我正在使用 macOS Sierra @g00glen00b 你能告诉我你使用的 IDE 和版本吗?

标签: spring-mvc spring-boot jakarta-mail


【解决方案1】:

我认为您应该使用的密码是 gmail 生成的应用程序密码,它不应该只是我猜的任何密码。

【讨论】:

  • Marc,是什么让您认为原始发布者没有使用正确的密码?我在错误消息中没有看到任何类似的内容。
【解决方案2】:

这行得通。

@Service
public class SendMail {

@Autowired
private JavaMailSender javaMailSender;

  public void sendingMail(String to, String subject, String body) {
    MimeMessage message=javaMailSender.createMimeMessage();
    MimeMessageHelper helper;
    helper=new MimeMessageHelper(message,true);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(body);
    javaMailSender.send(message);

 }}

【讨论】:

    【解决方案3】:

    似乎您的属性未正确获取,例如:

    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    

    你应该尝试使用像这样的其他方式:

    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    
    mailSender.setHost(emailProperties.getHost());
    mailSender.setPort(Integer.parseInt(emailProperties.getPort()));
    mailSender.setUsername(emailProperties.getUsername());
    mailSender.setPassword(emailProperties.getPassword());
    
    Properties javaMailProperties = new Properties();
    javaMailProperties.put("mail.smtp.starttls.enable", "true");
    javaMailProperties.put("mail.smtp.auth", "true");
    javaMailProperties.put("mail.transport.protocol", "smtp");
    javaMailProperties.put("mail.debug", "true");
    
    mailSender.setJavaMailProperties(javaMailProperties);
    

    Spring Boot Freemarker Email Template的帖子中查看更多信息

    希望对您有所帮助!

    【讨论】:

      【解决方案4】:

      您是否尝试将 javax.mail 添加到您的 pom 中? Spring 邮件发送者依赖于 JavaMail。

      【讨论】:

      猜你喜欢
      • 2012-05-14
      • 1970-01-01
      • 2023-03-18
      • 2019-03-04
      • 2012-04-06
      • 1970-01-01
      • 2022-08-18
      • 2019-01-18
      • 2023-03-19
      相关资源
      最近更新 更多