网站首页 文章专栏 springboot 发送邮件
springboot 发送邮件

springboot 发送邮件



 前言 :发送邮件应该是网站的必备拓展功能之一,注册验证,忘记密码或者是给用户发送营销信息,为了通知留言的用户,没别的好办法,只有通过邮箱实现,springboot里面对发送邮件,集成起来更加简单,方便,本篇文章介绍如何使用springboot发送简单的邮件,复杂的邮件,以及qq邮箱设置。



1,开启QQ邮箱的服务功能,进入我的qq邮箱,设置 > 账户 > POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务设置,开启POP3/SMTP服务,并点击生成授权码得到授权码备用。


TV(_IP9D_8MDW(1VY4${4VU.png


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, 结果,本博客用的留言通知就是使用这一套写的,效果如下。


RN9I87Y1~]){LSC2]Z0{G8O.png

NM9IOGN1~~(}LSU5[FJ%GBD.png

6, 注意:发送邮件功能在本地跑没问题,部署到linux上去后,发送邮件抛出异常,经检查,是腾讯云默认将25端口封住了,去腾讯云控制台解封25端口即可。


(_D}$@QC4LD6~9G3~(C_P4C.png





版权声明:本文由星尘阁原创出品,转载请注明出处!

本文链接:http://www.52xingchen.cn/detail/36




赞助本站,网站的发展离不开你们的支持!
来说两句吧
大侠留个名吧,或者可以使用QQ登录。
: 您已登陆!可以继续留言。
最新评论