有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用spring boot使用gmail smtp发送电子邮件

我正在尝试使用spring boot发送电子邮件。我有3个文件如下

邮件发送者。java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

public class MailSender
{
    @Autowired
    private static JavaMailSender mailSender;

    public static void main(String[] args)
    {
        sendemail();
    }
    public static void sendemail() {
        MimeMessage mail = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mail, true);
            helper.setTo("emailsendertester24@gmail.com");
            //helper.setReplyTo("someone@localhost");
            helper.setFrom("emailsendertester24@gmail.com");
            helper.setSubject("Lorem ipsum");
            helper.setText("Lorem ipsum dolor sit amet [...]");
        } catch (MessagingException e) {
            e.printStackTrace();
        } finally {}
        mailSender.send(mail);
        //return helper;
    }
}

pom。xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Example</groupId>
    <artifactId>SendingEmail</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.2.RELEASE</version>
    </parent>

    <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>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.5</version>
        </dependency>
    </dependencies>


</project>

应用程序。属性

spring.mail.host=smtp.gmail.com
spring.mail.username=*****
spring.mail.password=*****
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.socketFactory.port = 25
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false
spring.mail.properties.mail.smtp.ssl.enable=true

所以现在,当我尝试运行MailSender类时,它在MimeMessage mail=MailSender行上给出了一个错误“线程中的异常”main“java.lang.NullPointerException”。createMimeMessage() 我知道mailSender属性为空,因为它无法从应用程序中获取属性。属性文件


共 (2) 个答案

  1. # 1 楼答案

    你可以在Spring-Boot-Email-Tools项目中寻找现成的解决方案

    它还提供了一些有用的功能,比如调度、对模板引擎的支持以及REDIS的持久性

    如果你需要发送纯文本邮件,你只需要导入核心模块

    <dependency>
        <groupId>it.ozimov</groupId>
        <artifactId>spring-boot-email-core</artifactId>
        <version>0.5.0</version>
    </dependency>
    

    注释主要内容如下:

    package com.myapplication;
    
    @SpringBootApplication
    @EnableEmailTools
    public class MainApplication  {
    
        public static void main(final String... args) {
    
        }
    }
    

    application.yml(o properties)中提供配置,并在组件类中自动连接EmailService,例如

    @Autowired
    public EmailService emailService;
    
    public void sendEmailWithoutTemplating(){
       final Email email = EmailImpl.builder()
            .from(new InternetAddress("cicero@mala-tempora.currunt", "Marco Tullio Cicerone "))
            .to(Lists.newArrayList(new InternetAddress("titus@de-rerum.natura", "Pomponius Attĭcus")))
            .subject("Laelius de amicitia")
            .body("Firmamentum autem stabilitatis constantiaeque eius, quam in amicitia quaerimus, fides est.")
            .encoding(Charset.forName("UTF-8")).build();
    
       emailService.send(email);
    }
    

    更多示例可以在该项目的GitHub存储库中找到。此外,LinkedIn上还有this article

  2. # 2 楼答案

    出现此问题是因为您在此块中使用了未正确终止的递归:

    public static void send() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("abc@gmail.com");
        message.setTo("xyz@gmail.com");
        message.setSubject("hello");
        mailSender.send();
    }
    

    你打电话给邮件发送者。send()方法,该方法引用了他自己。更改内部调用方法