自动备份和发送邮件
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);
全部代码
扫描二维码关注公众号,回复:
13259131 查看本文章
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>