springboot实现邮件发送

邮件发送

创建一个springboot项目

用IDEA创建springboot项目。
springboot实现邮件发送_第1张图片
之后可以一直next,依赖之后说。

添加依赖

打开pom.xml,添加如下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

修改配置文件

打开application.properties,添加如下内容:

// 网易邮箱测试
spring.mail.username=xxxxxx@163.com
spring.mail.password=网易账号授权码
spring.mail.host=smtp.163.com

// 如果是QQ邮箱,则需要加一行,网易邮箱不用
#spring.mail.properties.mail.smtp.ssl.enable=true // 开启加密验证

关于授权码,注意不是你的邮箱密码,位置如下所示。
springboot实现邮件发送_第2张图片

只要选择开启之后发个短信即可获取。

测试类

首先在测试类要注入JavaMailSenderImpl

@Autowired
private JavaMailSenderImpl mailSender;

运行测试类进行邮件发送

	@Test
    void contextLoads() {
     
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setSubject("主题");
        simpleMailMessage.setText("内容");
        simpleMailMessage.setFrom("[email protected]"); // 发件人邮箱
        simpleMailMessage.setTo("[email protected]"); // 收件人邮箱
        mailSender.send(simpleMailMessage);
    }

或许你可能一次成功,或许你失败了,失败的原因80%都是这个。

org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: xxxxxxx: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

说明你的授权码不对,那就再试试吧。

到这一步,你已经实现了一封由springboot发送的邮件。


实现异步

需要提前添加web依赖。

修改启动类

添加@EnableAsync注解,开启异步操作

@EnableAsync // 开启异步操作
@SpringBootApplication
public class DemoApplication {
     
    public static void main(String[] args) {
     
        SpringApplication.run(DemoApplication.class, args);
    }
}

创建Controller层和Service层

Service层

创建一个AsyncService类:

package Service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

@Service
public class AsyncService {
     
    @Async // Spring看到这个就知道是一个异步操作了
    public void async() {
     
        try {
     
            Thread.sleep(10000); // 停止10秒
        }
        catch (InterruptedException e) {
     
            e.printStackTrace();
        }
        System.out.println("数据正在处理");
    }
}

Controller层
创建一个AsyncController类:
页面访问,当我们请求服务器时,遇到线程方法会停止10秒。

随便玩玩,不要求获取方式了。

package Controller;

import Service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {
     
    @Autowired
    AsyncService asyncService;

    @RequestMapping("/async")
    public String async() {
     
        asyncService.async();
        return "yes";
    }
}

添加@Async注解,实现异步操作

package Controller;

import Service.AsyncService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AsyncController {
     
    @Autowired
    AsyncService asyncService;

    @Async
    @RequestMapping("/async")
    public String async() {
     
        asyncService.async();
        return "yes";
    }
}

你可能感兴趣的:(Spring,boot,spring,boot)