自動備份和發送郵件
-
- 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", "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>