网站首页 文章专栏 springboot 发送邮件
前言 :发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息,为了通知留言的用户,没别的好办法,只有通过邮箱实现,springboot里面对发送邮件,集成起来更加简单,方便,本篇文章介绍如何使用springboot发送简单的邮件,复杂的邮件,以及qq邮箱设置。 |
1,开启QQ邮箱的服务功能,进入我的qq邮箱,设置 > 账户 > POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务设置,开启POP3/SMTP服务,并点击生成授权码得到授权码备用。
2, 配置springboot的maven依赖。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
3,配置yml文件
spring: mail: host: smtp.qq.com username: xxxxxxxxxx@qq.com 这里填写你的qq邮箱地址 password: yyyyyyyyyy 注意这里并非你的qq密码,而是刚才我们获取的授权码 properties: mail: smtp: auth: true starttls: enable: true required: true
4, 编写代码MailService
@Service @Slf4j public class MailService { @Autowired private JavaMailSender sender; @Value("${spring.mail.username}") private String from; /** * 发送纯文本的简单邮件 * @param to * @param subject * @param content */ 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 { sender.send(message); log.info("简单邮件已经发送。"); } catch (Exception e) { log.error("发送简单邮件时发生异常!", e); } } /** * 发送html格式的邮件 * @param to * @param subject * @param content */ @Async public void sendHtmlMail(String to, String subject, String content){ MimeMessage message = sender.createMimeMessage(); try { //true表示需要创建一个multipart message if(null!= to){ MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); sender.send(message); log.info("html邮件已经发送。"); }else{ log.error("发送html邮件时发生异常!,目标邮件地址为null"); } } catch (MessagingException e) { log.error("发送html邮件时发生异常!{}", e); } } /** * 发送带附件的邮件 * @param to * @param subject * @param content * @param filePath */ public void sendAttachmentsMail(String to, String subject, String content, String filePath){ MimeMessage message = sender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); FileSystemResource file = new FileSystemResource(new File(filePath)); String fileName = filePath.substring(filePath.lastIndexOf(File.separator)); helper.addAttachment(fileName, file); sender.send(message); log.info("带附件的邮件已经发送。"); } catch (MessagingException e) { log.error("发送带附件的邮件时发生异常!", e); } } /** * 发送嵌入静态资源(一般是图片)的邮件 * @param to * @param subject * @param content 邮件内容,需要包括一个静态资源的id,比如:<img src=\"cid:rscId01\" > * @param rscPath 静态资源路径和文件名 * @param rscId 静态资源id */ public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){ MimeMessage message = sender.createMimeMessage(); try { //true表示需要创建一个multipart message MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content, true); FileSystemResource res = new FileSystemResource(new File(rscPath)); helper.addInline(rscId, res); sender.send(message); log.info("嵌入静态资源的邮件已经发送。"); } catch (MessagingException e) { log.error("发送嵌入静态资源的邮件时发生异常!", e); } } }
通过调用MailService就可以使用邮件功能了。
5, 结果,本博客用的留言通知就是使用这一套写的,效果如下。
6, 注意:发送邮件功能在本地跑没问题,部署到linux上去后,发送邮件抛出异常,经检查,是腾讯云默认将25端口封住了,去腾讯云控制台解封25端口即可。
版权声明:本文由星尘阁原创出品,转载请注明出处!