mysql使用Navicat自动备份+javamail发送邮件

自动备份和发送邮件

Navicat自动备份

点击自动运行,部分Navicat版本这里叫计划
在这里插入图片描述

新建批处理作业
在这里插入图片描述
点击Backup ,选择需要备份的库 ,双击右侧的可用工作,会在上面出现已选工作
在这里插入图片描述

保存,输入名字
在这里插入图片描述
点击设置计划任务,触发器,新建。部分Navicat版本这里显示的计划不是触发器,一样的点新建就好
在这里插入图片描述
设置你想要的时间,我这里为了演示设置的比较近的时间,点击确定
在这里插入图片描述
触发器已启用
在这里插入图片描述
点击确定,如果出现以下提示[80070005]拒绝访问,可能是权限不够
在这里插入图片描述
可以尝试退出Navicat后使用管理员运行
在这里插入图片描述

备份成功
在这里插入图片描述

java发送邮件

这里用QQ邮箱举例
设置–账户
在这里插入图片描述
往下拉,找到在这里插入图片描述
点击生成授权码
生成一个16的授权码,保存好,我每次生成都要短信验证,嫌麻烦这里我就没截图了,我之前已经生成好了
接下来自动发邮件是使用java实现的
新建项目
在这里插入图片描述
选择springBoot
在这里插入图片描述
项目创建完成后引入如下邮件需要的jar包

<dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0-b01</version>
        </dependency>

回到Navicat

在这里插入图片描述
360报错不要管
在这里插入图片描述
复制文件夹路径
在这里插入图片描述
这里自动备份是一份新的文件,不能通过文件名取到,我这里的做法是获取这个文件夹下所有的文件

    public static List<String> getAllFile(String directoryPath, boolean isAddDirectory) {
    
    
        List<String> list = new ArrayList<String>();
        File baseFile = new File(directoryPath);
        if (baseFile.isFile() || !baseFile.exists()) {
    
    
            return list;
        }
        File[] files = baseFile.listFiles();
        for (File file : files) {
    
    
            if (file.isDirectory()) {
    
    
                if (isAddDirectory) {
    
    
                    list.add(file.getAbsolutePath());
                }
                list.addAll(getAllFile(file.getAbsolutePath(), isAddDirectory));
            } else {
    
    
                list.add(file.getAbsolutePath());
            }
        }
        return list;
    }

这个list是正序排列的,直接获取最后一个就行

List<String> allFile1 = getAllFile("C:\\Users\\Administrator\\Documents\\Navicat\\MySQL\\Servers\\localhost\\zhlyweb", false);
        String s = allFile1.get(allFile1.size()-1);

全部代码

package com.xy.mail.mail;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.File;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class SendComplexEmail {
    
    

    public static void sendMail() throws GeneralSecurityException, MessagingException {
    
    
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");
        prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
        prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

        // QQ邮箱设置SSL加密
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        //1、创建定义整个应用程序所需的环境信息的 Session 对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
    
    
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
    
    
                //传入发件人的姓名和授权码
                return new PasswordAuthentication("你的邮箱@qq.com","16位授权码");
            }
        });

        //2、通过session获取transport对象
        Transport transport = session.getTransport();

        //3、通过transport对象邮箱用户名和授权码连接邮箱服务器
        transport.connect("smtp.qq.com","你的邮箱@qq.com","16位授权码");

        //4、创建邮件,传入session对象
        MimeMessage mimeMessage = complexEmail(session);

        //5、发送邮件
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

        //6、关闭连接
        transport.close();
    }



    public static MimeMessage complexEmail(Session session) throws MessagingException {
    
    
        //消息的固定信息
        MimeMessage mimeMessage = new MimeMessage(session);

        //发件人
        mimeMessage.setFrom(new InternetAddress("你的邮箱@qq.com"));
        //收件人
        mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("收件人的邮箱@qq.com"));
        //邮件标题
        mimeMessage.setSubject("邮件标题");

        //准备文本
        MimeBodyPart text = new MimeBodyPart();

        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日,xxxxxxx");
        String format = sdf.format(date);

        text.setContent(format+"<img src='cid:test.png'>","text/html;charset=utf-8");

        //附件
        MimeBodyPart appendix = new MimeBodyPart();

        List<String> allFile1 = getAllFile("C:\\Users\\Administrator\\Documents\\Navicat\\MySQL\\Servers\\localhost\\zhlyweb", false);
        String s = allFile1.get(allFile1.size()-1);
        String[] split = s.split("\\\\");
        String s1 = split[split.length - 1];

        appendix.setDataHandler(new DataHandler(new FileDataSource(s)));
        appendix.setFileName(s1);

        //拼装邮件正文
        MimeMultipart mimeMultipart = new MimeMultipart();
//        mimeMultipart.addBodyPart(image);
        mimeMultipart.addBodyPart(text);
        mimeMultipart.setSubType("related");//文本和图片内嵌成功

        //将拼装好的正文内容设置为主体
        MimeBodyPart contentText = new MimeBodyPart();
        contentText.setContent(mimeMultipart);

        //拼接附件
        MimeMultipart allFile = new MimeMultipart();
        allFile.addBodyPart(appendix);//附件
        allFile.addBodyPart(contentText);//正文
        allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed


        //放到Message消息中
        mimeMessage.setContent(allFile);
        mimeMessage.saveChanges();//保存修改

        return mimeMessage;
    }

    public static List<String> getAllFile(String directoryPath, boolean isAddDirectory) {
    
    
        List<String> list = new ArrayList<String>();
        File baseFile = new File(directoryPath);
        if (baseFile.isFile() || !baseFile.exists()) {
    
    
            return list;
        }
        File[] files = baseFile.listFiles();
        for (File file : files) {
    
    
            if (file.isDirectory()) {
    
    
                if (isAddDirectory) {
    
    
                    list.add(file.getAbsolutePath());
                }
                list.addAll(getAllFile(file.getAbsolutePath(), isAddDirectory));
            } else {
    
    
                list.add(file.getAbsolutePath());
            }
        }
        return list;
    }
}


启动类上添加@EnableScheduling 注解,开启定时事务
在这里插入图片描述
编写定时任务类


@Slf4j
@Component
public class Task {
    
    

    @Scheduled(cron = "0 0 10 * * ?")
    public void sendMail() throws GeneralSecurityException, MessagingException {
    
    

        long startTime = new Date().getTime();
        log.info("执行定时任务:发送邮件");
        SendComplexEmail.sendMail();
        long endTime = new Date().getTime();
        long l = endTime - startTime;
        log.info("定时任务,发送邮件---完成,耗时"+l+"毫秒 ");
    }

}

这里添加了日志信息,需要以下jar包,删除掉也不影响使用

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
        </dependency>

Guess you like

Origin blog.csdn.net/weixin_45352783/article/details/115366913