На этот раз я говорил только о функции отправки электронной почты, но я боялся отсутствия контента, поэтому я добавил некоторые объяснения функции сжатия файлов.
Во -первых, отправляется электронная почта. Функция электронной почты имеет соответствующие зависимости в Springboot. Этот:
<Depective> <groupid> org.springframework.boot </GroupId> <artifactid> Spring-Boot-Starter-mail </artifactid> </vehyse>
Разработка функции электронной почты довольно проста в Springboot. Здесь я суммирую контент разработки:
A> Добавить пакет зависимости
B> Настройте основные параметры почты (в YMAL или свойство)
C> Inject javamailsender в обслуживание и вызовет соответствующие методы
Тем не менее, здесь может возникнуть проблема, то есть при развертывании конкретного сервера, сервер будет блокировать порт службы электронной почты и обычные проблемы безопасности электронной почты. Я дам решение, когда объясняю здесь.
Во -первых, вам нужно представить компонент электронной почты в POM.XML проекта. Компонентная версия должна соответствовать версии Springboot (вы не можете ее написать, я опускаю ее здесь):
<Depective> <groupid> org.springframework.boot </GroupId> <artifactid> Spring-Boot-Starter-mail </artifactid> </vehyse>
Далее следует настроить основные параметры электронной почты в файле конфигурации:
Весна: почта: хост: smtp.exmail.qq.com Имя пользователя: [email protected] Пароль: Пароль по умолчанию по умолчанию. SMTP465 порт
При настройке параметров вы должны обратить внимание на вдавливание, потому что я даю формат конфигурации YAML. Если это конфигурация свойства, это примерно так (пример): spring.mail.host:smtp.exmail.qq.com. Каждый ребенок находится в полном формате. В начале я пропустил конфигурацию под элементом свойств (серьезный, SSL, порт). Позже я обнаружил, что сервер заблокировал 25 -й порт почты, поэтому он возможно локально, но он не работает на сервере, поэтому ему необходимо указать порт почтовой службы 465. Я использую здесь почтовый ящик QQ. При использовании 163 или других почтовых ящиков вам необходимо проверить порты, поддерживаемые поставщиком услуг самостоятельно. Что касается вопросов безопасности по электронной почте, то здесь нужно объявить два, один - SSL Trust и Socket Factory of Mail. Для получения подробной информации, пожалуйста, смотрите вышеуказанный красный раздел. Приведенная выше конфигурация действительна только для почтовых ящиков QQ, и она не гарантирует, что другие почтовые ящики также применимы.
Хорошо, конфигурация завершена, здесь мы начинаем писать конкретный класс реализации:
Import xxx.common.util.dateutil; import org.apache.commons.lang3.stringutils; import org.slf4j.logger; import org.slf4j.loggerfactory; импорт org.springframework.beans.factory.annotation.autowired; import.springframeWor org.springframework.mail.simplemailmessage; импорт org.springframework.mail.javamail.javamailsender; импорт org.springframework.mail.javamail.mememessagehelper; импорт org.spramework.stepotype.service java.util.date; import java.util.list; import java.util.map; @servicepublic class mailservice {private Static Final Logger = loggerFactory.getLogger (mailService.class); @Value ("$ {spring.mail.username}") частная строка send_user_addr; @Autowired Private Javamailsender Mailsender; /*** Отправить простую электронную почту* @param получить получатель* @param obj Отправить тему* @param content Content*/public void sendsimplemail (string ceat, string obj, строка содержимого) {if (! Stringutils.isnotblank (content) ||! Stringutils.isnotblank (checte)) return; // не отправлять пустую почту simplemessemess = new Saymailmesse (rete)); message.setfrom (send_user_addr); if (rete.contains (";")) message.setto (checte.split (";")); else message.setto (получение); message.setsubject (obj); message.settext (content); try {mailsender.send (сообщение); Log.info («Простая почта Отправить успех!»); } catch (Exception e) {log.error ("sendsimplemail error!", e); }} private StringBuilder Strbuilder; / *** Форма отправки HTML Mail Multi-List List* @param Получить получатель* @param obj Отправить тему (тема)* @param content Content*/ public void sendhtmlmailbylist (string, строка obj, list <apt> content) {if (content.isempty () ||! Stringtils.isnotblank (ateft) aull == obj); Mimemessage msg = mailsender.creatememessage (); try {mimemessageHelper helper = new mimemessageHelper (msg, true, "UTF-8"); // Решить искаженную задачу helper.setfrom (send_user_addr); if (checte.contains (";")) helper.setto (checte.split (";")); else helper.setto (получить); helper.setsubject (obj); strbuilder = new StringBuilder (); strbuilder.append ("<! Doctype html> <html> <head> <meta http-equiv =/" "content-type/" content =/"text/html; charset = utf-8/"> </head> <body style =/"padding: 3% 2%;/"> "); strbuilder.append ("<h2> Это сообщение автоматически отправляется в систему. </h2>"); strbuilder.append ("<h2> Дата отправки по" +dateutil.getDateformat (new Date (), dateUtil.datetime_default_format) +"</h2>"); strbuilder.append ("<h2> Ниже приведены подробности: </h2>"); strbuilder.append ("<table border =/" 2px solid red/"width =/" 100%/">"); // head strbuilder.append ("<Th>"+st [i]+"</th>"); strbuilder.append ("</tr>"); strbuilder.append ("</tr>"); Object [] ST = Content.get (0) .KeySet (). ToArray (); for (int i = 0; i <st.length; i ++) strbuilder.append ("<Th>"+st [i]+"</th>"); strbuilder.append ("</tr>"); strbuilder.append ("</tr>"); strbuilder.append ("</tr>"); // body strbuilder.append ("<tbody>"); для (карта элемент: content) {strbuilder.append ("<tr>"); for (Object str: st) strbuilder.append ("<td>"+item.get (str)+"</td>"); strbuilder.append ("</tr>"); } strbuilder.append ("</tbody>"); strbuilder.append ("</table>"); strbuilder.append ("</table>"); strbuilder.append ("<h3 style =/" text-align: right/"> С наилучшими пожеланиями </h3>"); strbuilder.append ("</body> </html>"); //Log.info (strbuilder.toString ()); helper.settext (strbuilder.tostring (), true); } catch (Exception e) {log.error ("sendhtmlmail error:", e); } mailsender.send (msg); } / *** Отправить html mail mail form record form* @param получить получатель* @param obj Отправить тему (заголовок)* @param content content* / public void sendhtmlmailbyitem (string obj obj, list <string> content) {if (content.isempty () ||! Stringutils.isnotblank (cheat) || null == obly); Mimemessage msg = mailsender.creatememessage (); try {mimemessageHelper helper = new mimemessageHelper (msg, true, "UTF-8"); // Решить искаженную задачу helper.setfrom (send_user_addr); if (checte.contains (";")) helper.setto (checte.split (";")); else helper.setto (получить); helper.setsubject (obj); strbuilder = new StringBuilder (); strbuilder.append ("<! Doctype html> <html> <head> <meta http-equiv =/" "content-type/" content =/"text/html; charset = utf-8/"> </head> <body style =/"padding: 3% 2%;/"> "); strbuilder.append ("<h3> Это сообщение автоматически отправляется в систему. </h3>"); strbuilder.append ("<h3> Дата отправки по" +dateutil.getdateformat (new Date (), dateutil.dateTime_default_format) +"</h3>"); strbuilder.append ("<h3> Ниже приведены подробности: </h3>"); strbuilder.append ("<table border =/" 2px solid red/"width =/" 100%/">"); // head strbuilder.append ("<table border =/" 2px solid red/"width =/" 100%/">"); // head strbuilder.append ("<Th>"+obj.touppercase ()+"detail </th>"); strbuilder.append ("<Th>"+obj.touppercase ()+"detail </th>"); strbuilder.append ("</table>"); // body strbuilder.append ("<tbody>"); for (String Item: Content) {strbuilder.append ("<tr> <td>"+item+"</td> </tr>"); } strbuilder.append ("</tbody>"); strbuilder.append ("</table>"); strbuilder.append ("<h3 style =/" text-align: right; font-weight: normal;/"> С наилучшими пожеланиями </h3>"); strbuilder.append ("</body> </html>"); strbuilder.append ("</body> </html>"); strbuilder.append ("</body> </html>"); strbuilder.append ("</body> </html>"); Log.info (strbuilder.toString ()); helper.settext (strbuilder.tostring (), true); } catch (Exception e) {log.error ("sendhtmlmail error:", e); } mailsender.send (msg); }}
Выше приведено, чтобы инкапсулировать функцию электронной почты в класс услуг. При его использовании вам нужно только ввести текущий класс и позвонить напрямую. Вышеупомянутые инкапсулируют два метода: один - простая отправка электронной почты, а другой - электронное письмо с таблицей HTML. Если вам нужно отправлять вложения, вам необходимо поместить вложения в метод MimemessageHelper (называемый addattachment («имя файла», файл)). Поскольку здесь нет фактических требований, оно опущено. Хорошо, функция отправки электронной почты была завершена. Давайте посмотрим на фактический эффект здесь:
Функция электронной почты была реализована. Теперь я расскажу о функции сжатия файла. Существует примерно четыре типа реализаций функций сжатия, а именно:
A> Использовать сжатие API, предоставленное Java.util.zip
B> Используйте сжатие API, предоставленное пакетом Ant Ant Ant (org.apache.tools.ant.taskdefs.zip)
C> Используйте сжатие API, предоставленное Zip4j (net.lingala.zip4j)
D> вызовите сжатие команды оболочки хоста
Здесь нужно упомянуть три вопроса:
> Обычный по электронной почте сжатый китайский искаженный код (не поддерживается на китайском языке)
B> не может распаковать после сжатия (ошибка декомпрессии)
C> Проблема добавления сжатых паролей для сжатия файлов
Функция сжатия фактически была разработана. Вышеуказанные три очка особенно неприятны для новичков. Здесь я поделюсь проблемами, с которыми я сталкивался при разработке функции сжатия.
Используя сжатие, предоставленное нативным пакетом java.util, если сжатый файл используется на китайском языке, он будет искажен (он, как говорят, является ошибкой в JDK), и код, реализованный сжатием, является относительно сложным (особенно устанавливает пароли), особенно для перекрестного сжатия и сжатия многофол.
Хотя использование инструмента ZIP, предоставленного Apache, позволяет избежать вышеуказанных проблем, следует отметить, что этот пакет ANT вступает в конфликт с WebLogic (ошибка будет сообщена во время развертывания) и не может сжать пароль. Если вы используете Weblogic вместо Tomocat, вы должны обратить внимание на эту проблему.
Использование Java для вызова команды хоста также является хорошим выбором, но это требует написания команд Shell. Развертывание на платформе Windows не очень дружелюбно, а портирование более хлопотно.
Наконец, для вышеуказанных проблем я рекомендую ZIP4J здесь. Ниже также приводится объяснение реализации сжатия ZIP4J.
Во -первых, вам нужно представить пакеты зависимостей:
<!-Сжатие: поддержка сжатия шифрования-> <Dependency> <groupId> net.lingala.zip4j </GroupId> <strifactid> Zip4j </artifactid> <sersive> 1.3.2 </version> </depervice>
Кроме того, инкапсулируйте класс инструмента сжатия/декомпрессии для легкого использования:
Импорт net.lingala.zip4j.core.zipfile; import net.lingala.zip4j.exception.zipexception; import net.lingala.zip4j.model.zipparameters; импорт net.lingala.zip4j.util.zip4jconstants; импорт org.spramework.util.stringtils; java.io.file;/*** Этот класс инструмента использует Zip4j для сжатия и декомпрессии*/public class Ziputil {// Объявление сжатого объекта Частный статический Zipparameters; // декаменное файловое объект частный статический Zipfile Zipfile; /** * * @param sourceFilePath The path of the compressed file (single file, folder) * @param zipFilePath Compressed file path* @param password Compressed password* @return Compressed successfully: true, compression failed: false */ public static Boolean singleFileCompress(String sourceFilePath,String zipFilePath,String password){ parameters = new Zipparameters (); parameters.setCompressionMethod (Zip4jconstants.comp_deflate); // Метод сжатия (метод по умолчанию) Параметры.setCompressionLevel (Zip4jconstants.deflate_level_normal); // Уровень сжатия (уровень по умолчанию) // Настройки шифрования сжатия if (! StringUtils.isempty (пароль)) {parameters.setencryptfiles (true); // Будет ли установить шифрование файла (по умолчанию нет) параметры. Setencryptionmethod (Zip4jconstants.enc_method_standard); // Метод шифрования (здесь стандартное сжатие) Параметры. SETAPPASSWORD (password.thararray ()); } try {Zipfile Zipfile = new Zipfile (ZipfilePath); // Если это файл, сжимайте его напрямую. Если это папка, пройдите файлы и сжимайте их все, если (новый файл (SourceFilePath) .isfile ()) {Zipfile.setFilenameCharset ("gbk"); zipfile.addfile (новый файл (SourceFilePath), параметры); вернуть истину; } // file ff = новый файл (SourceFilePath); File [] flst = new File (SourceFilePath) .listFiles (); System.out.println ("Количество файлов =>"+flst.length); для (файл f: flst) {zipfile.setfilenamecharset ("gbk"); zipfile.addfile (f, параметры); } вернуть true; } catch (zipexception e) {e.printstacktrace (); вернуть ложь; } catch (Id Exception Id) {id.printstackTrace (); вернуть ложь; }} public static boolean unzip (string zipfile, string unzipdir) {try {ziputil.zipfile = new zipfile (zipfile); Ziputil.zipfile.setfilenamecharset ("gbk"); // Установить формат кодирования // Использовать встроенный метод, чтобы проверить, является ли zip-файл законным, включая файл существует, является ли это файл Zip, будь то zip-файл, но новая коррупция (! Zipexception («файл незаконен или не существует»); } // По сравнению со собственным встроенным встроенными Java путь файла будет автоматически генерируется без оценки Ziputil.zipfile.extractall (unzipdir); вернуть истину; } catch (zipexception e) {return false; }}} Приведенный выше метод сжатия поставляется с функцией сжатия пароля, которая может сжать отдельные файлы или файлы каталогов. По сравнению с нативной реализацией, она внезапно освежает. Единственное, что нужно отметить здесь, это то, что сжатый целевой файл не должен проникать до сжатия, в противном случае будет сообщена ошибка! Кроме того, при распаке, вы должны обратить внимание на кодирование файлов и определить, существует ли файл.
Суммировать
Выше приведено реализация Springboot добавления функций отправки электронной почты и сжатия, которые редактор представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя!