springboot实现QQ邮箱定时发送邮件

一、下载jdk、eclipse,安装,eclipse启动后使用本地jre环境。

二、在eclipse marketplace中搜索spring,安装最新版本吧。

 

三、新建spring boot工程,使用国内的镜像源吧,否则下载很慢,容易丢文件等。

 

工程新建完毕后,启动一次试试,可能出现一些问题,百度查查吧。

四、写发邮件的代码

@Component
public class EmailSendServiceIpm implements EmailSendService {


    @Autowired
    private JavaMailSenderImpl mailSender;

    @Value("${spring.mail.username}")
    private String fromEmailAddress;
    
    @Override
    public boolean sendSimpleEmail(String toEmailAddress, String subject, String text) {
        //定制纯文本邮件信息SimpleMailMessage
        System.out.println("sendSimpleEmail函数入口");
        System.out.println("发件人地址:"+ fromEmailAddress);
        SimpleMailMessage message=new SimpleMailMessage();
        try {
            message.setFrom(fromEmailAddress);  //设置发件箱
            message.setTo(toEmailAddress);  //设置收件箱
            message.setSubject(subject);  //设置邮件主题
            message.setText(text);  //设置邮件内容
            System.out.println("邮件内容封装完毕"+message.toString());
            mailSender.send(message);  //调用Java封装好的发送方法
            return true;
        }catch (Exception e){
            System.err.println(e);
            return false;
        }
    }

    @Override
    public boolean sendAttachmentEmail(String id) {
        
        //计划向txt中依次写入四行,收件人姓名、收件人内容、收件人邮箱、收件人附件、邮件主题
        String filePathhtml = "D:\\soft\\jdk8u314\\workspace\\demo\\src\\main\\java\\com\\example\\demo\\api\\"+ id +".txt";
        String strTmp = "";
        String toEmailAddress=null;
        String subject=null;
        String attachFilePath=null;
        ArrayList <String> arlist = new ArrayList <String>();
        try {
            FileInputStream fileInputStream = new FileInputStream(filePathhtml);
            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            
            strTmp = bufferedReader.readLine();
            while(strTmp != null) {
                arlist.add(strTmp);
                strTmp = bufferedReader.readLine();
            }
            bufferedReader.close();
        } catch (Exception e) {
            System.err.println(e);
        }
        
        System.out.println(arlist.toString());
        
        if(arlist.size() != 5) {
            System.err.println("数量错误");;
        }else {
            toEmailAddress = arlist.get(2);
            subject = arlist.get(4);
            attachFilePath = arlist.get(3);
            strTmp = arlist.get(1);
        }
        
        //定制复杂邮件信息MimeMessage
        MimeMessage message=mailSender.createMimeMessage();
        try {
            //使用MimeMessageHelper帮助类,并设置multipart多部件使用为true。帮助将邮件信息封装到MimeMessage message中
            MimeMessageHelper helper=new MimeMessageHelper(message,true);
            helper.setFrom(fromEmailAddress,"BIISC"); //设置发件箱
//            helper.setFrom(fromEmailAddress, subject);
            helper.setTo(toEmailAddress);   //设置收件箱
            helper.setBcc("18310401860@163.com");
            helper.setSubject(subject);  //设置邮件主题
            helper.setText(strTmp,true);  //设置邮件内容
            //设置邮件静态资源
            //FileSystemResource res=new FileSystemResource(new File(rscPath));
            //helper.addInline(rscId, res);
            //设置附件地址
            FileSystemResource file=new FileSystemResource(new File(attachFilePath));
            helper.addAttachment("20220723.pptx", file);
            //发送邮件
            mailSender.send(message);
            System.out.println("复杂邮件发送成功");
            return true;
        } catch (MessagingException | UnsupportedEncodingException e) {
            System.err.println("复杂邮件发送失败。。。。。。");
            return false;
        }
    }

}

以上是核心代码。其他方面的知识,百度下吧。

不熟悉spring boot容易踩得坑,使用了@Autowired  @Value注解,类不能new了,以上注解表示将实例的维护交给了spring,实例也要用@Autowired生成,否则报空指针。

参考:https://blog.csdn.net/weixin_43002202/article/details/123782976

https://www.csdn.net/tags/MtjaYg4sMDMzMTItYmxvZwO0O0OO0O0O.html

 

posted @ 2022-07-26 14:05  小德cyj  阅读(198)  评论(0编辑  收藏  举报