您的位置 首页 java

SpringBoot Email:自己写一个邮件发送功能

1.准备工作

使用spring boot发送邮件,需要做一个准备工作,必须打开发送邮件的服务。这里以qq为例,到邮箱设置–> 账户设置–> 找到pop3/smpt服务,点击开启,根据提示,发送短信到官方申请开启,最后会获得一个授权码,这是我们下面需要的。

2.配置文件:application.yml

 spring 
  mail:
      host: smtp.qq.com
      password: ******  # 刚才申请的授权码
      username: ****** # 你的qq邮箱
      protocol: smtp
      test-connection: true
      default-encoding: utf-8
      properties:
        mail:
          smtp:
            auth: true  # 认证
            ssl:
              enable: true  #  SSL
            starttls: # TLS需要时
              enable: true
              required: true  

3.邮件工具类

 @Component
public class MailUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(MailUtil.class);
    @Value("${spring.mail.username}")
    public String fromUser;
    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 普通邮件发送
     * @param email
     * @throws Exception
     */    public void sendEmail(Email email) throws Exception {
        LOGGER.info("发送普通邮件给:{}",email.getToEmail());
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(fromUser);
        message.setTo(email.getToEmail());
        message.setSubject(email.getSubject());
        message.setText(email.getContent());
        javaMailSender.send(message);
    }

    /**
     * 带图片发送
     * @param email
     */    public void sendPicture(Email email) throws Exception {
        LOGGER.info("发送带图片邮件给:{}",email.getToEmail());
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //这里可以自定义发信名称比如:setFrom(fromUser,'gq')
        helper.setFrom(fromUser);
        helper.setTo(email.getToEmail());
        helper.setSubject(email.getSubject());
        helper.setText("<html><body><img src="cid:pic" ></body></html>",true);
        FileSystemResource file = new FileSystemResource(new File(email.getFilePath()));
        //pic 名称需与 cid 那里的名称对应
        helper.addInline("pic", file);
        javaMailSender.send(message);
    }

    /**
     * 发送html,如 链接
     * @param email
     */    public void sendHtml(Email email) throws Exception {
        LOGGER.info("发送带图片邮件给:{}",email.getToEmail());
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setFrom(fromUser);
        helper.setTo(email.getToEmail());
        helper.setSubject(email.getSubject());
        helper.setText(email.getContent(),true);
        javaMailSender.send(message);
    }

    /**
     * 发送附件
     * @param email
     * @throws Exception
     */    public void sendWithAttachments(Email email) throws Exception {
        LOGGER.info("发送带附件邮件给:{}",email.getToEmail());
        MimeMessage message = javaMailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true,"UTF-8");
        helper.setFrom(fromUser);
        helper.setTo(email.getToEmail());
        helper.setSubject(email.getSubject());
        helper.setText(email.getContent());
        //FileSystemResource file = new FileSystemResource(new File(email.getFilePath()));
        File file = new File(email.getFilePath());
        String fileName = email.getFilePath().substring(email.getFilePath().lastIndexOf(File.separator));
        fileName = MimeUtility.encodeWord(fileName,"UTF-8","B");
        //发送多个
        helper.addAttachment(fileName,file);
        javaMailSender.send(message);

    }
}  

这个工具类的方法只是发送单一内容,复杂的内容,如 图片,附件,文字等,大家可以根据单一的自己去补充下,做个练手。

4.测试用例

 @Test
    void contextLoads() throws Exception {
        /* 发送纯文本
        Email email = new Email()
                .setToEmail(new String[]{"133******@qq.com"})
                .setSubject("测试邮件发送")
                .setContent("hello,成功的发送了邮件");
        mailUtil.sendEmail(email);*/

        /*发送模板邮件
        Email email = new Email()
                .setToEmail(new String[]{"133******@qq.com"})
                .setSubject("测试模板邮件发送");
        Context context = new Context();
        context.setVariable("title","模板发送");
        context.setVariable("content","lalala");
        String process = templateEngine.process("emailTpl/emailTpl", context);
        email.setContent(process);
        mailUtil.sendEmail(email);*/

        /*
        Email email = new Email()
                .setToEmail(new String[]{"133******@qq.com"})
                .setSubject("测试邮件发送图片")
                .setFilePath("C:UsersGQPicturesCamera Roll壁纸2.jpg");
        mailUtil.sendPicture(email);*/
        Email email = new Email()
                .setToEmail(new String[]{"133******@qq.com"})
                .setSubject("测试邮件发送附件")
                .setContent("你好,欢迎查阅附件")
                .setFilePath("C:UsersGQDownloads9月竣工时间表.xls");
        mailUtil.sendWithAttachments(email);
    }  

结果如下图:

SpringBoot Email:自己写一个邮件发送功能

纯文本邮件

SpringBoot Email:自己写一个邮件发送功能

发送图片

附件

5.小结

ok,今天的一个小demo就到这里了,大家不妨动手试下。不过要注意里面的细节,比如发送图片的cid等等,一不小心就弄错了。刚刚小编就在发送附件这里出错了,截取文件名的时候写成了(0,length)这种。好了,喜欢小编的朋友可以点个关注哦[呲牙][呲牙][呲牙]

文章来源:智云一二三科技

文章标题:SpringBoot Email:自己写一个邮件发送功能

文章地址:https://www.zhihuclub.com/181727.shtml

关于作者: 智云科技

热门文章

网站地图