springBoot后台发送内容至邮箱

4 篇文章 0 订阅

发送邮箱

第一步需要去申请一个邮箱,我这里用了网易云邮箱

在这里插入图片描述

邮箱必须开启服务
添加配置
email:
  host: smtp.163.com
  port: 25
  username: ***@163.com
  password: ******
  timeout: 25000
添加配置类
package com.hbyh.bam.test;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.*;

@Component
@ConfigurationProperties(prefix="email") //接收application.yml中的system下面的属性
public class MailConfig {
    @Value("${host}")
    public String host;
    @Value("${port}")
    public String port;
    @Value("${email.username}")
    public String userName;
    @Value("${password}")
    public String passWord;
    @Value("${email.username}")
    public String emailForm;
    @Value("${timeout}")
    public String timeout;
    public String personal="***系统";
    public String subject="标题";
    public Properties properties = new Properties();
}

添加工具类
package com.hbyh.bam.test;

import java.io.*;
import java.util.*;
import javax.mail.internet.*;

import com.hbyh.bam.utils.SpringUtil;
import org.springframework.mail.javamail.*;
import org.springframework.web.multipart.MultipartFile;

public class MailUtil {
    private MailConfig mc= SpringUtil.getBean(MailConfig.class);
    private JavaMailSenderImpl mailSender = createMailSender();
    /**
     * 邮件发送器
     *
     * @return 配置好的工具
     */
    private JavaMailSenderImpl createMailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(mc.host);
        sender.setPort(Integer.parseInt(mc.port));
        sender.setUsername(mc.userName);
        sender.setPassword(mc.passWord);
        sender.setDefaultEncoding("Utf-8");
        Properties p = new Properties();
        p.setProperty("mail.smtp.timeout", mc.timeout);
        p.setProperty("mail.smtp.auth", "false");
        sender.setJavaMailProperties(p);
        return sender;
    }

    /**
     * 发送邮件
     *
     * @param to 接受人
     * @param html 发送内容
     */
    public int sendMail(String to, String html) {
        int cg=0;
        try{
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            // 设置utf-8或GBK编码,否则邮件会有乱码
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            messageHelper.setFrom(mc.emailForm, mc.personal);
            messageHelper.setTo(to);
            messageHelper.setSubject(mc.subject);
            messageHelper.setText(html, true);
            mailSender.send(mimeMessage);
            cg=1;
        }catch (Exception e){
            cg=-1;
            e.printStackTrace();
        }
        return cg;
    }

    public int sendMail(MultipartFile multipartFile, String to, String html) {
        int cg=0;
        try{
            File file = MultiToFile(multipartFile);
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            // 设置utf-8或GBK编码,否则邮件会有乱码
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
            messageHelper.setFrom(mc.emailForm, mc.personal);
            messageHelper.setTo(to);
            messageHelper.setSubject(mc.subject);
            messageHelper.setText(html!=null?html:"", true);
            if(file!=null){
                //获取文件名称
                String filename=file.getName();
                //添加附件
                messageHelper.addAttachment(filename, file);//附件
            }
            mailSender.send(mimeMessage);
            cg=1;
        }catch (Exception e){
            cg=-1;
            e.printStackTrace();
        }
        return cg;
    }

    /**
     * 将multipartFile文件转为File文件
     */
    public File MultiToFile(MultipartFile multipartFile) {
        if(multipartFile==null){
            return null;
        }
        //获取file名字
        String filename=multipartFile.getOriginalFilename();
        File file = new File(filename);
        try {
            InputStream ins=multipartFile.getInputStream();
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e){
            file=null;
            e.printStackTrace();
        }
        return file;
    }
}

最后调用

package com.hbyh.bam.test;

import com.hbyh.bam.dto.RespBean;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Api(tags = "测试")
@RestController
@RequestMapping("/test")
public class TestController {

    @PostMapping("/email")
    @ResponseBody
    public RespBean show(@RequestParam("file")MultipartFile multipartFile){
        int num=new MailUtil().sendMail(multipartFile,"miluhang@126.com",null);
        if(num<=0){
            return RespBean.goBack(1,"发送失败,请重试");
        }else{
            return RespBean.goBack(0,"已发送");
        }
    }
}
在此本人遇到535异常,此异常是因为读取username默认读取的本地名字,所以我在此加上email,535异常一般是因为账号密码写错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值