天天看點

mysql使用Navicat自動備份+javamail發送郵件

自動備份和發送郵件

    • Navicat自動備份
    • java發送郵件

Navicat自動備份

點選自動運作,部分Navicat版本這裡叫計劃

mysql使用Navicat自動備份+javamail發送郵件

建立批處理作業

mysql使用Navicat自動備份+javamail發送郵件

點選Backup ,選擇需要備份的庫 ,輕按兩下右側的可用工作,會在上面出現已選工作

mysql使用Navicat自動備份+javamail發送郵件

儲存,輸入名字

mysql使用Navicat自動備份+javamail發送郵件

點選設定計劃任務,觸發器,建立。部分Navicat版本這裡顯示的計劃不是觸發器,一樣的點建立就好

mysql使用Navicat自動備份+javamail發送郵件

設定你想要的時間,我這裡為了示範設定的比較近的時間,點選确定

mysql使用Navicat自動備份+javamail發送郵件

觸發器已啟用

mysql使用Navicat自動備份+javamail發送郵件

點選确定,如果出現以下提示[80070005]拒絕通路,可能是權限不夠

mysql使用Navicat自動備份+javamail發送郵件

可以嘗試退出Navicat後使用管理者運作

mysql使用Navicat自動備份+javamail發送郵件

備份成功

mysql使用Navicat自動備份+javamail發送郵件

java發送郵件

這裡用QQ郵箱舉例

設定–賬戶

mysql使用Navicat自動備份+javamail發送郵件

往下拉,找到

mysql使用Navicat自動備份+javamail發送郵件

點選生成授權碼

生成一個16的授權碼,儲存好,我每次生成都要短信驗證,嫌麻煩這裡我就沒截圖了,我之前已經生成好了

接下來自動發郵件是使用java實作的

建立項目

mysql使用Navicat自動備份+javamail發送郵件

選擇springBoot

mysql使用Navicat自動備份+javamail發送郵件

項目建立完成後引入如下郵件需要的jar包

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

回到Navicat

mysql使用Navicat自動備份+javamail發送郵件

360報錯不要管

mysql使用Navicat自動備份+javamail發送郵件

複制檔案夾路徑

mysql使用Navicat自動備份+javamail發送郵件

這裡自動備份是一份新的檔案,不能通過檔案名取到,我這裡的做法是擷取這個檔案夾下所有的檔案

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 注解,開啟定時事務

mysql使用Navicat自動備份+javamail發送郵件

編寫定時任務類

@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>