使用Spring Boot来发送邮件

一、pom.xml导入相关依赖

二、实体类

首先需要创建实体类。其中的get,set方法省略。唯一需要注意的一点是password不是登录密码,是开启POP3之后设置的客户端授权码 。下面的配置邮箱会提到。

三、相关邮箱配置

163邮箱配置

spring.mail.host=smtp.163.com #邮箱服务器地址 
spring.mail.username=xxx.163.com #用户名 
spring.mail.password=ooo #开启POP3之后设置的客户端授权码 
spring.mail.default-encoding=UTF-8 #编码 

QQ邮箱配置

spring.mail.host=smtp.qq.com 
spring.mail.username=xxx@qq.com 
spring.mail.password=ooo #开启POP3之后设置的客户端授权码 
spring.mail.default-encoding=UTF-8

注意点:

1、这里的password不是登录密码,是开启POP3之后设置的客户端授权码 
2、 默认端口25,使用465端口时,需要添加配置: 
spring.mail.port=465 
spring.mail.properties.mail.smtp.ssl.enable=true

四、Controller层

 

五、工具类

通过包装一个邮件工具类来测试发送邮件是否成功操作。

解释:

1、ISysNoticeEmailConfigService 这个是通过mybatis-plus实体生成工具生成的service层,通过@Autowired注解注入属性值。

2、用getone()方法来获取对象数据。

以下是简单的工具类代码实现:

@Slf4j
@Component
public class EmailUtil {
    private static JavaMailSenderImpl mailSender;
    @Autowired
    private ISysNoticeEmailConfigService sysNoticeEmailConfigService;

    /**
     * 初始化java工具发送类
     */
    public void init() {
        SysNoticeEmailConfig sysNoticeEmailConfig = sysNoticeEmailConfigService.getOne(null);
        if (sysNoticeEmailConfig == null) {
            log.error("init 没有找到对应的邮件配置");
        }
        mailSender = new JavaMailSenderImpl();
        mailSender.setHost(sysNoticeEmailConfig.getHost());
        mailSender.setPort(465);
        mailSender.setUsername(sysNoticeEmailConfig.getUsername());
        mailSender.setPassword(sysNoticeEmailConfig.getPassword());
        //加认证机制
        Properties javaMailProperties = new Properties();
        javaMailProperties.put("mail.smtp.auth", true);
        javaMailProperties.put("mail.smtp.starttls.enable", true);
        javaMailProperties.put("mail.smtp.timeout", 5000);
        javaMailProperties.put("mail.smtp.socketFactory.port", 465);
        javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        javaMailProperties.put("mail.smtp.socketFactory.fallback", false);
        javaMailProperties.put("mail.smtp.starttls.required", true);
        mailSender.setJavaMailProperties(javaMailProperties);
        log.info("初始化邮件发送信息完成");
    }

    public boolean testMailSend(SysNoticeEmailConfig sysNoticeEmailConfig) {
        try {
            mailSender = new JavaMailSenderImpl();
            mailSender.setHost(sysNoticeEmailConfig.getHost());
            mailSender.setPort(465);
            mailSender.setUsername(sysNoticeEmailConfig.getUsername());
            mailSender.setPassword(sysNoticeEmailConfig.getPassword());
            //加认证机制
            Properties javaMailProperties = new Properties();
            javaMailProperties.put("mail.smtp.auth", true);
            javaMailProperties.put("mail.smtp.starttls.enable", true);
            javaMailProperties.put("mail.smtp.timeout", 5000);
            javaMailProperties.put("mail.smtp.socketFactory.port", 465);
            javaMailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            javaMailProperties.put("mail.smtp.socketFactory.fallback", false);
            javaMailProperties.put("mail.smtp.starttls.required", true);
            mailSender.setJavaMailProperties(javaMailProperties);
            if (mailSender == null) {
                init();
            }
            simpleMailSend(sysNoticeEmailConfig.getTestEmail(), "邮件测试", "邮件测试");
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 发送普通文本
     *
     * @param email   对方邮箱地址
     * @param subject 主题
     * @param text    邮件内容
     */
    public void simpleMailSend(String email, String subject, String text) {
        //创建邮件内容
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(mailSender.getUsername());
        message.setTo(email);
        message.setSubject(subject);
        message.setText(text);
        //发送邮件
        mailSender.send(message);
        log.info("邮件发送成功");
    }

    /**
     * @param template           模版
     * @param noticeForm         接收人信息
     * @param sysNoticeAnnexList 附件信息
     * @throws MessagingException
     */
    public boolean attachedSend(SysNoticeTemplate template, NoticeForm noticeForm, List<SysNoticeAnnex> sysNoticeAnnexList) {
        try {
            SysNoticeTaskRecipient recipient = noticeForm.getSysNoticeTaskRecipient();
            MimeMessage message = mailSender.createMimeMessage();
            //创建MimeMessageHelper对象,处理MimeMessage的辅助类
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            //使用辅助类MimeMessage设定参数
            helper.setFrom(mailSender.getUsername());
            helper.setTo(recipient.getUserEmail());
            helper.setSubject(template.getNoticeTitle());
            helper.setText(template.getNoticeContent());
            //查看邮件是否有文件附件
            if (!CollectionUtils.isEmpty(sysNoticeAnnexList)) {
                for (SysNoticeAnnex sysNoticeAnnex : sysNoticeAnnexList) {
                    FileSystemResource file = new FileSystemResource(sysNoticeAnnex.getAnnexPath());
                    helper.addAttachment(sysNoticeAnnex.getAnnexName(), file);
                }
            }
            //发送邮件
            if (mailSender == null) {
                this.init();
            }
            mailSender.send(message);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            log.info("邮件发送失败,请检查");
            return false;
        }

    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值