diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java b/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java index 3f1afb3a..3734adac 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java @@ -172,7 +172,7 @@ public class JavaFxApplication extends Application { } break; } - loadingTable(); + loadTable(); JavaFxApplication.this.mFields.getSelectionModel().clearSelection(); } } @@ -371,7 +371,7 @@ public class JavaFxApplication extends Application { switch (level) { case 0: {//查看模块 mTree.setContextMenu(project_menu); - loadingProject(); + loadProject(); } break; case 1: {//查看模块 @@ -389,7 +389,7 @@ public class JavaFxApplication extends Application { if (currentMD != null) { currentTable = projectManager.findTableByTableName(currentMD, (String) targetItem.getValue()); } - loadingTable(); + loadTable(); break; } default: @@ -538,13 +538,13 @@ public class JavaFxApplication extends Application { @Override public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { currentTable.setSys(newValue); - loadingTable(); + loadTable(); } }); } ManagerFactory.getReflashManager(this).start(); - loadingProjectTree(); + loadProjectTree(); super.init(); } @@ -554,7 +554,7 @@ public class JavaFxApplication extends Application { String fieldName = projectManager.getNewFieldName(fields); System.out.println("新增字段-" + fieldName + "成功!"); this.mFields.getSelectionModel().select(fields.size() - 1); - loadingTable(); + loadTable(); } } @@ -564,13 +564,13 @@ public class JavaFxApplication extends Application { if (selectedIndex > -1 && !currentTable.getFields().get(selectedIndex).getIsSystem()) { currentTable.getFields().remove(selectedIndex); mFields.getSelectionModel().clearSelection(); - loadingTable(); + loadTable(); } } } - public void loadingProjectTree() { + public void loadProjectTree() { currentProject = projectManager.getProject(); currentProject.setValue(currentProject.getProjectName()); currentProject.setExpanded(true); @@ -621,7 +621,10 @@ public class JavaFxApplication extends Application { } } - public void loadingProject() { + /** + * 加载表项目面板 + */ + public void loadProject() { GridPane gridPane = mProjectLoader.getRoot(); detailProjectController.getProjectName().setText(currentProject.getProjectName()); detailProjectController.getProjectBasePackage().setText(currentProject.getProjectBasePackage()); @@ -629,14 +632,12 @@ public class JavaFxApplication extends Application { detailProjectController.getMultiDB().setSelected(currentProject.isNeedMoreDB()); detailProjectController.getSysMD().setSelected(currentProject.isNeedSys()); ObservableList toggles = detailProjectController.getDatabase().getToggles(); - Toggle toggle = toggles.get(0); for (Toggle tog : toggles) { RadioButton radioButton = (RadioButton) tog; - if (radioButton.getText().equals(currentProject.getDatabase())) { - toggle = radioButton; + if (radioButton.getText().equals(currentProject.getDatabase().name())) { + radioButton.setSelected(true); } } - detailProjectController.getDatabase().selectToggle(toggle); detailProjectController.getCloud().setSelected(currentProject.isNeedCloud()); if (gridPane != null) { @@ -649,9 +650,9 @@ public class JavaFxApplication extends Application { } /** - * 加载对象信息 + * 加载表对象面板 */ - private void loadingTable() { + private void loadTable() { GridPane gridPane = mTableLoader.getRoot(); if (currentTable != null) { detailTableController.getTablename().setText(currentTable.getTableName()); @@ -686,7 +687,7 @@ public class JavaFxApplication extends Application { field.setFieldName(newValue); if (newValue.endsWith("_ID")) { field.setFieldType(FieldType.Long); - loadingTable(); + loadTable(); } } }); @@ -788,7 +789,7 @@ public class JavaFxApplication extends Application { currentTable.getFields().add(i2, t1); currentTable.getFields().remove(i2 + 1); } - loadingTable(); + loadTable(); } event.setDropCompleted(true); event.consume(); @@ -1132,7 +1133,7 @@ public class JavaFxApplication extends Application { switch (level) { case 0: {//编辑项目名称 projectManager.getProject().setProjectName((String) event.getNewValue()); - loadingProject(); + loadProject(); } break; case 1: {//编辑模块 @@ -1147,7 +1148,7 @@ public class JavaFxApplication extends Application { Table table = projectManager.findTableByTableName(md, (String) event.getOldValue()); if (table != null) { table.setTableName((String) event.getNewValue()); - loadingTable(); + loadTable(); } break; } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java index d8a4850a..936777b9 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/MainController.java @@ -103,8 +103,8 @@ public class MainController { if (file != null && file.exists()) { dBmanger.invalidate(file);//初始化模型树 - 到内容 - main.loadingProjectTree();//加载模型树 - 到组件 - main.loadingProject(); + main.loadProjectTree();//加载模型树 - 到组件 + main.loadProject(); } } @@ -139,8 +139,8 @@ public class MainController { @FXML public void modelCreate(ActionEvent actionEvent) { dBmanger.modelCreate(); - main.loadingProjectTree(); - main.loadingProject(); + main.loadProjectTree(); + main.loadProject(); } @FXML @@ -151,8 +151,8 @@ public class MainController { public void handle(Event event) { dBmanger.delete(); dBmanger.invalidate(); - main.loadingProjectTree(); - main.loadingProject(); + main.loadProjectTree(); + main.loadProject(); } }); } @@ -173,7 +173,7 @@ public class MainController { if (file != null) { System.out.println("生成目录:" + file.getAbsolutePath()); - dBmanger.generate(ManagerFactory.getProjectManager().getProject(), file.getAbsolutePath()); + dBmanger.generate(ManagerFactory.getProjectManager().getProject(), file); } } } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java index 717d1ded..6aca3bec 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ProjectManager.java @@ -1,7 +1,6 @@ package xyz.wbsite.dbtool.javafx.manger; import org.springframework.boot.system.ApplicationHome; -import xyz.wbsite.dbtool.javafx.enums.DataBase; import xyz.wbsite.dbtool.javafx.enums.FieldType; import xyz.wbsite.dbtool.javafx.manger.callable.AndroidCallable; import xyz.wbsite.dbtool.javafx.manger.callable.ApiCallable; @@ -17,7 +16,6 @@ import xyz.wbsite.dbtool.javafx.po.MySQLDBmapper; import xyz.wbsite.dbtool.javafx.po.OracleDBmapper; import xyz.wbsite.dbtool.javafx.po.Project; import xyz.wbsite.dbtool.javafx.po.SBMDBOption; -import xyz.wbsite.dbtool.javafx.po.SQLiteDBmapper; import xyz.wbsite.dbtool.javafx.po.Table; import xyz.wbsite.dbtool.javafx.po.VueOption; import xyz.wbsite.dbtool.javafx.tool.Dialog; @@ -43,8 +41,8 @@ public class ProjectManager { public static boolean isUpdate = false; private XmlManager xmlService; private JsonManager jsonManager; - public static AbstractDBmapper dBmapper; public static File path; + private ExecutorService service = Executors.newCachedThreadPool(); private Project project = new Project(); public ProjectManager() { @@ -324,32 +322,18 @@ public class ProjectManager { } } - private static ExecutorService service = Executors.newFixedThreadPool(1); - - public void tryGetDBmapper(Project project) { - if (project.getDatabase().equals(DataBase.MySQL.name())) { - dBmapper = new MySQLDBmapper(); - } else if (project.getDatabase().equals(DataBase.Oracle.name())) { - dBmapper = new OracleDBmapper(); - } else if (project.getDatabase().equals(DataBase.SQLite.name())) { - dBmapper = new SQLiteDBmapper(); - } - } - /** * 生成模板 入口 * - * @param path + * @param root */ - public void generate(Project project, final String path) { - tryGetDBmapper(project); - - File root = new File(path); + public void generate(Project project, final File root) { if (!root.exists()) { Dialog.showTimedDialog(1000, "目录不存在!"); } Dialog.showProgress("生成中..."); - new Thread() { + + service.execute(new Runnable() { @Override public void run() { Callable callback = new SpringBootCallable(project, path); @@ -365,13 +349,14 @@ public class ProjectManager { Dialog.stopPopup(); Dialog.showSuccess("生成完毕."); } - }.start(); + }); } public void generateApi(File module, File api, List domainList, List apis) { if (module.exists()) { Dialog.showProgress("生成中..."); - new Thread() { + + service.execute(new Runnable() { @Override public void run() { boolean mkdirs = api.mkdirs(); @@ -391,7 +376,7 @@ public class ProjectManager { Dialog.stopPopup(); Dialog.showSuccess("Api生成完毕."); } - }.start(); + }); } } @@ -401,6 +386,7 @@ public class ProjectManager { @Override public void run() { AndroidCallable androidCallable = new AndroidCallable(path, option); + Future submit = service.submit(androidCallable); try { Boolean b = (Boolean) submit.get(); @@ -425,6 +411,7 @@ public class ProjectManager { @Override public void run() { VueCallable vueCallable = new VueCallable(path, option); + Future submit = service.submit(vueCallable); try { Boolean b = (Boolean) submit.get(); @@ -449,6 +436,7 @@ public class ProjectManager { @Override public void run() { SBMDBCallable callable = new SBMDBCallable(path, option); + Future submit = service.submit(callable); try { Boolean b = (Boolean) submit.get(); @@ -520,9 +508,9 @@ public class ProjectManager { String driverClassName = properties.get("driverClassName"); Connection cn = null; - if ("Orcale".equals(type)) { + if ("Oracle".equals(type)) { try { - dBmapper = new OracleDBmapper(); + AbstractDBmapper dBmapper = new OracleDBmapper(); //加载驱动类 Class.forName(driverClassName); @@ -593,7 +581,7 @@ public class ProjectManager { } } else if ("Mysql".equals(type)) { try { - dBmapper = new MySQLDBmapper(); + AbstractDBmapper dBmapper = new MySQLDBmapper(); //加载驱动类 Class.forName(driverClassName); @@ -665,7 +653,6 @@ public class ProjectManager { } catch (SQLException e) { e.printStackTrace(); } - return false; } return false; diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ReflashManager.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ReflashManager.java index 60189680..7fa2c963 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/ReflashManager.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/ReflashManager.java @@ -18,7 +18,7 @@ public class ReflashManager extends Thread { e.printStackTrace(); } if (ProjectManager.isUpdate) { - main.loadingProjectTree(); + main.loadProjectTree(); ProjectManager.isUpdate = false; } } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java index 065dc3fc..05b95127 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java @@ -3,11 +3,13 @@ package xyz.wbsite.dbtool.javafx.manger.callable; import xyz.wbsite.dbtool.javafx.enums.DataBase; import xyz.wbsite.dbtool.javafx.manger.FreeMarkerManager; import xyz.wbsite.dbtool.javafx.manger.ManagerFactory; -import xyz.wbsite.dbtool.javafx.manger.ProjectManager; import xyz.wbsite.dbtool.javafx.manger.XmlManager; import xyz.wbsite.dbtool.javafx.po.AbstractDBmapper; import xyz.wbsite.dbtool.javafx.po.Module; +import xyz.wbsite.dbtool.javafx.po.MySQLDBmapper; +import xyz.wbsite.dbtool.javafx.po.OracleDBmapper; import xyz.wbsite.dbtool.javafx.po.Project; +import xyz.wbsite.dbtool.javafx.po.SQLiteDBmapper; import xyz.wbsite.dbtool.javafx.po.Table; import xyz.wbsite.dbtool.javafx.tool.Tool; import xyz.wbsite.dbtool.web.frame.utils.FileUtil; @@ -26,16 +28,25 @@ import java.util.concurrent.Callable; public class SpringBootCallable implements Callable { - private String root; + private File root; private Project project; private AbstractDBmapper dBmapper; private FreeMarkerManager freeMarkerManager; - public SpringBootCallable(Project project, String root) { + public SpringBootCallable(Project project, File root) { this.root = root; this.project = project; this.freeMarkerManager = ManagerFactory.getFreeMarkerManager(); - this.dBmapper = ProjectManager.dBmapper; + // 根据配置获取数据库处理器 + if (project.getDatabase().name().equals(DataBase.MySQL.name())) { + this.dBmapper = new MySQLDBmapper(); + } else if (project.getDatabase().name().equals(DataBase.Oracle.name())) { + this.dBmapper = new OracleDBmapper(); + } else if (project.getDatabase().name().equals(DataBase.SQLite.name())) { + this.dBmapper = new SQLiteDBmapper(); + } else { + this.dBmapper = new MySQLDBmapper(); + } } @@ -65,7 +76,6 @@ public class SpringBootCallable implements Callable { // 生成POM generatePom(projectDir, project); - {//生成java文件 //生成 Controller System.out.println("生成模块:action"); diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringMVCCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringMVCCallable.java index 50d698f8..d906fc1c 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringMVCCallable.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringMVCCallable.java @@ -3,11 +3,13 @@ package xyz.wbsite.dbtool.javafx.manger.callable; import xyz.wbsite.dbtool.javafx.enums.DataBase; import xyz.wbsite.dbtool.javafx.manger.FreeMarkerManager; import xyz.wbsite.dbtool.javafx.manger.ManagerFactory; -import xyz.wbsite.dbtool.javafx.manger.ProjectManager; import xyz.wbsite.dbtool.javafx.manger.XmlManager; import xyz.wbsite.dbtool.javafx.po.AbstractDBmapper; import xyz.wbsite.dbtool.javafx.po.Module; +import xyz.wbsite.dbtool.javafx.po.MySQLDBmapper; +import xyz.wbsite.dbtool.javafx.po.OracleDBmapper; import xyz.wbsite.dbtool.javafx.po.Project; +import xyz.wbsite.dbtool.javafx.po.SQLiteDBmapper; import xyz.wbsite.dbtool.javafx.po.Table; import xyz.wbsite.dbtool.javafx.tool.Tool; @@ -22,6 +24,7 @@ public class SpringMVCCallable implements Callable { private DataBase dataBase; private Project project; private String option; + private AbstractDBmapper dBmapper; private Tool tool = new Tool(); private FreeMarkerManager freeMarkerManager; @@ -32,9 +35,18 @@ public class SpringMVCCallable implements Callable { this.project = project; this.option = option; this.freeMarkerManager = ManagerFactory.getFreeMarkerManager(); + // 根据配置获取数据库处理器 + if (project.getDatabase().name().equals(DataBase.MySQL.name())) { + this.dBmapper = new MySQLDBmapper(); + } else if (project.getDatabase().name().equals(DataBase.Oracle.name())) { + this.dBmapper = new OracleDBmapper(); + } else if (project.getDatabase().name().equals(DataBase.SQLite.name())) { + this.dBmapper = new SQLiteDBmapper(); + } else { + this.dBmapper = new MySQLDBmapper(); + } } - private AbstractDBmapper dBmapper; public Boolean call() throws Exception { @@ -45,8 +57,6 @@ public class SpringMVCCallable implements Callable { Tool.clear(projectFile); } - dBmapper = ProjectManager.dBmapper; - String basePackage = this.project.getProjectBasePackage(); String[] split = basePackage.split("\\."); diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java b/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java index 625c3d04..31f833bd 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java @@ -10,9 +10,13 @@ import java.util.List; public class Project extends TreeItem { public Project() { - this.projectName = "EXAMPLE-WEB"; + this.projectName = "example-web"; this.projectBasePackage = "com.example"; this.projectAuthor = "author"; + this.needSys = true; + this.needEMail = false; + this.needCloud = false; + this.database = DataBase.MySQL; } public Project(String projectName) { diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/ApiClassReader.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/ApiClassReader.java index d14bbcc6..99fbbed8 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/ApiClassReader.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/ApiClassReader.java @@ -60,7 +60,7 @@ public class ApiClassReader { } public static void main(String[] args) throws IOException { - ApiClassReader javaClassReader = new ApiClassReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\EXAMPLE-WEB\\src\\main\\java\\com\\example\\action\\api\\system\\DictApi.java")); + ApiClassReader javaClassReader = new ApiClassReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\example-web\\src\\main\\java\\com\\example\\action\\api\\system\\DictApi.java")); System.out.println(); } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java index d70153a9..daf24c63 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Dialog.java @@ -220,7 +220,7 @@ public class Dialog { ChoiceBox databaseType = controller.getDatabaseType(); ObservableList data = FXCollections.observableArrayList(); - data.add("Orcale"); + data.add("Oracle"); data.add("Mysql"); databaseType.setItems(data); databaseType.setValue("Mysql"); @@ -232,7 +232,7 @@ public class Dialog { public void handle(ActionEvent event) { String value = (String) databaseType.getValue(); - if ("Orcale".equals(value)) { + if ("Oracle".equals(value)) { controller.getDriver().setText("oracle.jdbc.OracleDriver"); controller.getUrl().setText("jdbc:oracle:thin:@127.0.0.1:1521:orcl"); } else if ("Mysql".equals(value)) { diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/EntityReader.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/EntityReader.java index ec98f2ce..3cb074e7 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/EntityReader.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/EntityReader.java @@ -78,13 +78,13 @@ public class EntityReader { notesList.add(line); } - if (line.matches("public class\\s+(.*)\\s+extends\\s+BaseEntity\\s*\\{")) { - Pattern compile = Pattern.compile("public class\\s+(.*)\\s+extends\\s+BaseEntity\\s*\\{"); + if (line.matches("public class\\s+(.*)\\s+extends\\s+(\\w*)\\s*\\{")) { + Pattern compile = Pattern.compile("public class\\s+(.*)\\s+extends\\s+(\\w*)\\s*\\{"); Matcher matcher = compile.matcher(line); if (matcher.find()) { className = matcher.group(1); - fatherName = "BaseEntity"; + fatherName = matcher.group(2); } continue; } @@ -229,7 +229,7 @@ public class EntityReader { } public static void main(String[] args) throws IOException { - EntityReader javaClassReader = new EntityReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\EXAMPLE-WEB\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); + EntityReader javaClassReader = new EntityReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\example-web\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); System.out.println(); } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/RequestReader.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/RequestReader.java index 920534bc..db2a8c2c 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/RequestReader.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/RequestReader.java @@ -255,7 +255,7 @@ public class RequestReader { } public static void main(String[] args) throws IOException { - RequestReader requestReader = new RequestReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\EXAMPLE-WEB\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); + RequestReader requestReader = new RequestReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\example-web\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); System.out.println(); } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/ResponseReader.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/ResponseReader.java index fa035c9d..b30efb6c 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/ResponseReader.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/ResponseReader.java @@ -245,7 +245,7 @@ public class ResponseReader { } public static void main(String[] args) throws IOException { - ResponseReader requestReader = new ResponseReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\EXAMPLE-WEB\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); + ResponseReader requestReader = new ResponseReader(new File("D:\\wangbing\\Project\\dbtool\\target\\project\\example-web\\src\\main\\java\\com\\example\\module\\system\\rsp\\DictFindResponse.java")); System.out.println(); } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Tool.java b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Tool.java index 7da71939..e677eb87 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/tool/Tool.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/tool/Tool.java @@ -464,6 +464,10 @@ public class Tool { return file; } + public static File createPath(File path, String subdir) { + return createPath(path.getAbsolutePath(), subdir); + } + public static File createFile(String path, String fileName) { File path1 = createPath(path); File f = new File(path1, fileName); diff --git a/src/main/resources/modules/SpringBoot/java/frame/utils/MailUtil.java b/src/main/resources/modules/SpringBoot/java/frame/utils/MailUtil.java new file mode 100644 index 00000000..1abc65f5 --- /dev/null +++ b/src/main/resources/modules/SpringBoot/java/frame/utils/MailUtil.java @@ -0,0 +1,147 @@ +package ${basePackage}.frame.utils; + +import org.springframework.core.io.FileSystemResource; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.io.File; + +/** + * 邮件发送工具类 + *

+ * 注注注: 使用时确保包含以下依赖,否则发送功能无法实现 + * + * javax.mail + * mail + * 1.4.7 + * + *

+ * 注注注: JavaMailSender发送器,可通过Springboot配置注入,无需手动实例化 + * JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); + * javaMailSender.setDefaultEncoding(UTF-8); + * javaMailSender.setHost(smtp.example.com); + * javaMailSender.setUsername(**@example.com); + * javaMailSender.setPassword(******); + * javaMailSender.setPort(25); + *

+ * 发送简单邮件 + * MailUtil.sendSimpleMail(javaMailSender, username, "**@example.com", "标题", "内容"); + *

+ * 发送HTML邮件 + * String html = "

HTML邮件内容


飞机飞走了.。。o O 0 ○~~~~~~~"; + * MailUtil.sendHtmlMail(javaMailSender, username, "**@example.com", "给你的", html); + *

+ * 发送附件邮件示例 + * MailUtil.sendAttachmentsMail(javaMailSender, username, "**@example.com", "给你的", html, "E:\\1.jpg"); + *

+ * 发送HTML带示例 + * String resId = "id_001"; + * String html2 = "

html邮件内容


"; + * MailUtil.sendInlineResourceMail(javaMailSender, username, "**@example.com", "标题", html2, "E:\\1.jpg", resId); + */ +public class MailUtil { + + /** + * 发送简单邮件 + * + * @param sender 发送器 + * @param from 发送人 + * @param to 接收人 + * @param subject 邮件主题 + * @param content 邮件内容 + */ + public static void sendSimpleMail(JavaMailSender sender, String from, String to, String subject, String content) { + SimpleMailMessage message = new SimpleMailMessage(); + message.setTo(to); + message.setSubject(subject); + message.setText(content); + message.setFrom(from); + sender.send(message); + } + + /** + * 发送HTML邮件 + * + * @param sender 发送器 + * @param from 发送人 + * @param to 接收人 + * @param subject 邮件主题 + * @param content 邮件内容 + */ + public static void sendHtmlMail(JavaMailSender sender, String from, String to, String subject, String content) { + MimeMessage message = sender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setTo(to); + helper.setFrom(from); + helper.setSubject(subject); + helper.setText(content, true); + sender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + + /** + * 发送附件邮件 + * + * @param sender 发送器 + * @param from 发送人 + * @param to 接收人 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param filePath 文件路径 + */ + public static void sendAttachmentsMail(JavaMailSender sender, String from, String to, String subject, String content, String filePath) { + MimeMessage message = sender.createMimeMessage(); + MimeMessageHelper helper = null; + try { + helper = new MimeMessageHelper(message, true); + helper.setTo(to); + helper.setFrom(from); + helper.setSubject(subject); + helper.setText(content, true); + + FileSystemResource file = new FileSystemResource(new File(filePath)); + String fileName = file.getFilename(); + //此处可以添加多个附件 + helper.addAttachment(fileName, file); + sender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + } + + /** + * 发送图片邮件 + * + * @param sender 发送器 + * @param from 发送人 + * @param to 接收人 + * @param subject 邮件主题 + * @param content 邮件内容 + * @param rscPath 图片路径 + * @param rscId 资源ID + */ + public static void sendInlineResourceMail(JavaMailSender sender, String from, String to, String subject, String content, String rscPath, String rscId) { + MimeMessage message = sender.createMimeMessage(); + try { + MimeMessageHelper helper = new MimeMessageHelper(message, true); + helper.setTo(to); + helper.setFrom(from); + helper.setSubject(subject); + helper.setText(content, true); + + //可以添加多个图片 + FileSystemResource res = new FileSystemResource(new File(rscPath)); + helper.addInline(rscId, res); + + sender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + } +}