300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql使用Navicat自动备份+javamail发送邮件

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

时间:2022-01-15 06:30:18

相关推荐

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

自动备份和发送邮件

Navicat自动备份java发送邮件

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", "");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() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {//传入发件人的姓名和授权码return new PasswordAuthentication("你的邮箱@","16位授权码");}});//2、通过session获取transport对象Transport transport = session.getTransport();//3、通过transport对象邮箱用户名和授权码连接邮箱服务器transport.connect("","你的邮箱@","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("你的邮箱@"));//收件人mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("收件人的邮箱@"));//邮件标题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@Componentpublic 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>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。