Spring Boot初学之发送邮件遇到的问题

首先,新建一个Spring Boot项目,引入邮件依赖:


        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-mailartifactId>
        dependency>

这里有第一个坑,这个依赖引入尽量放在依赖的第一个,否则容易报红提示找不到该依赖。

第二步在application.properties中设置邮件参数:

spring.mail.host=smtp.163.com #邮箱服务器地址  这里用的是163邮箱 根据实际使用的邮箱更改
spring.mail.username=发送者邮箱地址
spring.mail.password= 这里填的是邮箱的授权码
spring.mail.default-encoding=UTF-8

mail.fromMail.addr=发送者邮箱地址

这里注意第二个坑,设置spring.mail.username和mail.fromMail.addr后面不要有多余的空格或注释,否则会报错:

Could not parse mail; nested exception is javax.mail.internet.AddressException: Domain contains control or whitespace in string ``18753377091@163.com  //以谁来发送邮件''

还有最好不要在参数结尾写注释,容易出错,注释最好写在前一行。

第三个坑就是 spring.mail.password 参数填的是邮箱的授权码而不是邮箱的密码,否则会报认证失败的错误:

Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: authentication failed

第三步写邮件的服务类:

package com.example.demo;

public interface MailService {
    /**
     * 发送简单邮件
     * @param to 邮件接收者
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String to, String subject, String content);

    /**
     * 发送网页邮件
     * @param to 邮件接收者
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendHtmlMail(String to, String subject, String content);

}

第四步写邮件服务实现类:

package com.example.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

/**
 * @ClassName: MailServiceImp
 * @Description: TODO
 * @Author: luochangzhang
 * @Date: 2019/7/9 16:03
 * @Version 1.0
 */
@Component
public class MailServiceImp implements MailService {
    /**
     * log打印
     */
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * 邮件发送Sender(框架自带)
     */
    @Autowired
    private JavaMailSender mailSender;
    /**
     * 邮件发送者
     */
    @Value("${mail.fromMail.addr}")
    private String from;
    @Override
    public void sendSimpleMail(String to, String subject, String content) {
    	//简单邮件发送
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        try {
            mailSender.send(message);
            logger.info("简单邮件已经发送。.........................");
        } catch (Exception e) {
            logger.error("发送简单邮件时发生异常!", e);
        }
    }

    @Override
    public void sendHtmlMail(String to, String subject, String content) {

    }

}

最后写测试类:

package com.example.controller;


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class WebApplicationTests {
    /**
     * 邮件发送服务实现类
     */
    @Autowired
    private com.example.demo.MailService MailService;

    @Test
    public void testSimpleMail() throws Exception {
        //发送邮件
        MailService.sendSimpleMail("接收者邮箱地址","测试邮件","这是一封测试邮件的内容");
    }
}

运行一下,发送成功的话可以登录邮箱查看邮件:

Spring Boot初学之发送邮件遇到的问题_第1张图片

你可能感兴趣的:(Spring,Boot,笔记)