SpringBoot企业开发: 邮件发送

一般企业开发包含:

  • 邮件发送
  • 定时任务
  • 批处理
  • Swagger2
  • 数据校验

准备:

邮件发送常用于注册时的身份认证、重要通知等。Sun公司提供了JavaMail来实现邮件发送,但是配置繁琐。

Spring:提供了JavaMailSender

SpringBoot: 提供了MailSenderAutoConfiguration

需要做的准备:

  • 登录QQ邮箱,找到账户:

  • 找到POP3/SMTP服务,点击“开启”

我这里已经开启过,第一次开启需要按照提示发送短信获取授权码,拿到授权码后,准备工作就完成了。

这里的授权码在后面的代码配置处有用,如果忘记了可以点击“生成授权码”

 此步骤会让 你发送短信,然后点击“已发送”,就可以获得上图的授权码。保存授权码,等哈会使用。


SpringBoot整合QQ邮箱:

 1.新建项目,并添加邮件依赖:

2. 添加邮件的基本配置信息:

SSL配置可以查看QQ邮箱的帮助中心。

3.发送简单的邮件:

3.1 封装邮件的发送;

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }
}

3.2 测试发送:

 

4.发送带附件的邮件:【调用Attachment添加附件,调用多次可以添加多个附件】

只需要在上面的MailService.java中添加一个方法:

package com.yinlei.qqemail;

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

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from 
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

测试发送:

5.发送带图片资源的邮件:

当邮件的正文内容需要插入图片的时候,可以使用FileSystemResource实现:

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }


    /**
     * 发送带图片资源的邮件
     * @param srcPath 图片资源路径
     * @param resIds 资源id
     */
    public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
        if (srcPath.length!=resIds.length){
            System.out.println("发送失败");
            return;
        }
        try{
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
            for (int i=0;i<srcPath.length;i++){
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
                helper.addInline(resIds[i],res);//将资源添加到邮件对象
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }
}

6.使用模板引擎构建邮件模板(FreeMarker或Thymeleaf)

这里以Thymeleaf演示:

6.1 添加依赖:

6.2创建模板:

package com.yinlei.qqemail;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

@Component
public class MailService {
    /**
     * JavaMailSender是springboot在MailSenderPropertiesConfiguration中配置号的,
     * 在Mail自动配置类MailSenderAutoConfiguration中导入。
     */
    @Autowired
    JavaMailSender javaMailSender;

    /**
     *
     * @param from 邮件发送者
     * @param to 收件人
     * @param cc 抄送人
     * @param subject 邮件主题
     * @param content 邮件内容
     */
    public void sendSimpleMail(String from,String to,String cc,String subject,String content){
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(from);
        simpleMailMessage.setTo(to);
        simpleMailMessage.setCc(cc);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        javaMailSender.send(simpleMailMessage);
    }


    /**
     * 发送带附件的邮件
     * @param from
     * @param to
     * @param subject
     * @param content
     * @param file
     */
    public void sendAttachFileMail(String from, String to, String subject, String content, File file){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            //参数2表示构造一个multipart message类型的邮件,multipart message类新的的邮件包含多个正文、附件、内嵌资源
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            //添加附件
            helper.addAttachment(file.getName(),file);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }


    /**
     * 发送带图片资源的邮件
     * @param srcPath 图片资源路径
     * @param resIds 资源id
     */
    public void sendMailWithImg(String from, String to, String subject, String content,String[] srcPath,String[] resIds){
        if (srcPath.length!=resIds.length){
            System.out.println("发送失败");
            return;
        }
        try{
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content,true);//参数true表示邮件正文是html格式,不传默认是false
            for (int i=0;i<srcPath.length;i++){
                FileSystemResource res = new FileSystemResource(new File(srcPath[i]));//构造静态资源
                helper.addInline(resIds[i],res);//将资源添加到邮件对象
            }
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }
    }

    /**
     * 使用模板引擎
     */
    public void sendHtmlMail(String from ,String to,String subject,String content){
        try {
            MimeMessage message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setTo(to);
            helper.setFrom(from);
            helper.setSubject(subject);
            helper.setText(content,true);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送失败");
        }


    }
}

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot提供了简单且强大的邮件发送接口开发功能。你可以使用Spring Boot的JavaMailSender接口来发送邮件。下面是一个简单的示例代码: 1. 首先,确保在你的项目中添加了Spring Boot的邮件依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 2. 在application.properties(或application.yml)文件中配置邮件服务器的相关信息,例如: ```properties spring.mail.host=your-smtp-server spring.mail.port=your-smtp-port spring.mail.username=your-username spring.mail.password=your-password ``` 3. 创建一个邮件发送服务类,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @Service public class EmailService { @Autowired private JavaMailSender mailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); mailSender.send(message); } } ``` 4. 在需要发送邮件的地方调用邮件发送服务类的sendEmail方法,例如: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailService emailService; @GetMapping("/sendEmail") public String sendEmail() { String to = "[email protected]"; String subject = "Test Email"; String text = "This is a test email."; emailService.sendEmail(to, subject, text); return "Email sent successfully."; } } ``` 这样,当你访问`/sendEmail`接口时,就会发送一封测试邮件到指定的收件人邮箱。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒不了的星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值