SpringBoot发送邮件(三)发送带有附件的邮件

18 篇文章 1 订阅
10 篇文章 0 订阅

前言:使用发邮件这个功能不难,但是也有一些坑,下面我把开发邮件功能总结了一下分享给大家,同时为了避免篇幅过长,导致大家看的不仔细或看一半不想看了,我将这个功能细分了一下,写了好几篇供大家各取所需。

Spring mail提供了 JavaMailSender接口实现邮件发送,其底层还是javamail,不过是进一步封装变得更加易用了。下面通过实例看看如何在Spring Boot中使用 JavaMailSender 发送邮件。

一、引入maven依赖

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


二、开启POP3/SMTP服务

       把这个写在第二步,是因为很多没做过发送邮件的可能不知道需要开启这个才能使用第三方程序来发邮件,并且生成的授权码下面也要用到。

 三、配置application.properties文件

spring.mail.host=smtp.qq.com      --qq邮箱为smtp.qq.com      163邮箱为smtp.163.com
spring.mail.username=123456789@qq.com     --自己定义的发送者账号
spring.mail.password=123456     --这里不是注册时的密码,而是上面生成的授权码
spring.mail.properties.mail.smtp.auth=true   --开启验证 true为开启,false不开启
spring.mail.properties.mail.smtp.starttls.enable=true    --加密通讯,true开启,false不开启
spring.mail.properties.mail.smtp.starttls.required=true    --是否必须通过使用加密通讯进行通讯,true开启,false不开启

 四、编写service

为了能真实使用,编写了一个MailService ,我就不在junt上写了

@Service
public class MailService {

	@Autowired
	private JavaMailSender mailSender;

     // 获取application.properties中的值赋给from
	@Value("${spring.mail.username}")
	private String from;

	/**
	 * @param toUsers 收件人
	 * @param ccUsers 抄送人
	 * @param title 标题
	 * @param text 内容
	 * @param fileName 文件名称
	 * @param filePath 文件路径
	 * @return
	 */
	public boolean sendFileMail(String[] toUsers,String[] ccUsers, String title, String text,String filePath,String fileName) {
		boolean isSend = true;
		try {
			MimeMessage mimeMessage = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from);// 发件人
			helper.setTo(toUsers);// 收件人
			//helper.setCc(ccUsers);//抄送人,使用Cc还是Bcc大家根据具体场景自己选择
			helper.setBcc(ccUsers);//秘密抄送(发件人,收件人,抄送人都不会看到抄送给谁了)
			helper.setSubject(title);// 标题
			helper.setText(text);// text:内容
			File file = new File(filePath);// 创建文件
			FileSystemResource resource = new FileSystemResource(file);
			helper.addAttachment(fileName, resource);//若要添加多个附件,需要创建多个file然后分别addAttachment
			mailSender.send(mimeMessage);// 发送邮件
		} catch (MessagingException e) {
			isSend = false;
			e.printStackTrace();
		}
		return isSend;
	}
}


 五、在controller中或service中调用

写到这大家肯定都会写了,下面我以controller为例(具体使用场景肯定不是这样的,我只是给大家举个例子)

@Controller
public class UserController {
 
    @Autowired
    MailService mailService;
 
    @RequestMapping("sendEmail")
    public String sendMail(ModelMap modelMap) {
        String[] toUsers={"666666@163.com","777777@163.com"};
        String[] ccUsers = {"888888@qq.com","999999@163.com"};
        String isSend=mailService.sendFileMail(toUsers, ccUsers,"测试邮件", "测试内容", "C:\\Users\\文档\\test1.txt", "test0001");
         if(isSend){
            modelMap.put("isSend", "成功发送给666666@163.com用户");
         }else{
            modelMap.put("isSend", "发送失败");
         }
        return "index";
    }
}


六、最后前台调用sendEmail就行了,具体我就不写了。

其他发送邮件功能参考:
SpringBoot发送邮件(一)只有文本的简单邮件:https://blog.csdn.net/m0_37679452/article/details/84345616

SpringBoot发送邮件(二)发送包含图片的邮件:https://blog.csdn.net/m0_37679452/article/details/84370881

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值