Diesmal habe ich nur über die E -Mail -Sendungsfunktion gesprochen, aber ich hatte Angst vor dem Mangel an Inhalten, also habe ich einige Erklärungen für die Dateikomprimierungsfunktion hinzugefügt.
Erstens wird eine E -Mail gesendet. Die E -Mail -Funktion hat entsprechende Abhängigkeiten im Springboot. Das:
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-E-Mail </artifactid> </abhängig>
Die Entwicklung der E -Mail -Funktion ist im Springboot recht einfach. Hier werde ich den Entwicklungsinhalt zusammenfassen:
A> Abhängigkeitspaket hinzufügen
B> Konfigurieren Sie die grundlegenden Parameter von Mail (in ymal oder Eigenschaft)
C> JavamailSender in den Dienst einfügen und relevante Methoden bezeichnen
Hier kann es jedoch ein Problem geben, dh wenn der spezifische Server bereitgestellt wird, blockiert der Server den E -Mail -Service -Port und die normalen E -Mail -Sicherheitsprobleme. Ich werde eine Lösung geben, wenn ich hier erklären werde.
Zunächst müssen Sie die E -Mail -Komponente in der Pom.xml des Projekts einführen. Die Komponentenversion muss der Springboot -Version entsprechen (Sie können sie nicht schreiben, ich habe sie hier weg):
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-E-Mail </artifactid> </abhängig>
Als nächstes konfigurieren Sie die grundlegenden Parameter von E -Mails in der Konfigurationsdatei:
Frühling: Mail: Host: SMTP.Exmail.qq.com Benutzername: [email protected] Passwort: Passwort default-coding: UTF-8 SSL: Trust: SMTP.Exmail.qqq.com Eigenschaften: mail: stp: auth: true #does-Authent-SocketFactory: Class: Javax. Port: 465 #Use SMTP465 Port
Bei der Konfiguration von Parametern müssen Sie auf die Eindrücke achten, da ich YAML -Konfigurationsformat gebe. Wenn es sich um eine Eigenschaftskonfiguration handelt, ist sie ungefähr so (Beispiel): Spring.mail.host:Smtp.exmail.qqq.com. Jedes Kind ist in einem vollständigen Format. Zu Beginn habe ich die Konfiguration unter dem Eigenschaftenelement (ernst, SSL, Port) weggelassen. Später stellte ich fest, dass der Server den 25. Port der E -Mail blockierte, sodass er lokal möglich ist, aber er funktioniert nicht auf dem Server. Daher muss der Mail -Service -Port 465 angegeben. Ich verwende hier ein QQ -Mailbox. Wenn Sie 163 oder andere Postfächer verwenden, müssen Sie die vom Dienstanbieter unterstützten Ports überprüfen. In Bezug auf E -Mail -Sicherheitsprobleme müssen zwei hier deklariert werden. Einer ist SSL Trust und die Socket Factory of Mail. Weitere Informationen finden Sie im obigen roten Abschnitt. Die obige Konfiguration gilt nur für QQ -Postfächer und garantiert nicht, dass auch andere Postfächer anwendbar sind.
OK, die Konfiguration ist abgeschlossen. Hier schreiben wir die spezifische Implementierungsklasse:
importieren xxx.common.util.dateutil; import org.apache.commons.lang3.stringutils; import org.slf4j.logger; import org.slf4j.loggerfactory; org.springframework.beans.factory.annotation.value; import org.springframework.mail org. @Value ("$ {spring.mail.username}") private String send_user_addr; @Autowired Private Javamailsender Mailsender; /*** Einfache E -Mail senden* @param empfangenem Empfänger* @param obj topic senden* @param content E -Mail -Inhalt*/public void SendSImplemail (String -Empfang, String -Obj, String -Inhalt) {if (! Stringutils.isnotblank (Inhalt) ||! StringUtils.isnotblank (empfangen)) return; message.setfrom (send_user_addr); if (reces.contains (";")) message.setto (empfangen.Split (";")); sonst message.setto (empfangen); Message.Setsubject (OBJ); message.setText (Inhalt); try {mailSender.send (message); Log.info ("einfache Mail senden Erfolg!"); } catch (Ausnahme e) {log.Error ("sendSimplemail error!", E); }} private StringBuilder Strbuilder; / *** Die Form des Sendens von HTML-Mail-Multi-List-Liste* @param empfangenem Empfänger* @param obj topic senden (Thema)* @param Inhalt E-Mail-Inhalt*/ public void sendhtmlmailByList (String empfangen, String-Obj, List <Map> Inhalt) {if (Inhalt. Mimemessage msg = mailsender.createMimememessage (); Versuchen Sie {MimemessageHelper Helper = new mimemessageHelper (msg, true, "utf-8"); // Lösen Sie das verstümmelte Problem Helper.setfrom (send_user_addr); if (empfangen.contains (";")) helper.setto (empfangen.Split (";")); sonst helfer.setto (empfangen); Helper.Setsubject (OBJ); strbuilder = new StringBuilder (); strbuilder.append ("<! docType html> <html> <kopf> <meta http-äquiv =/" content-type/"content =/" text/html; charset = utf-8/"> </head> <body style =/" padding: 3% 2%;/">"); strbuilder.append ("<h2> Diese Nachricht wird automatisch an das System gesendet. </h2>"); strbuilder.append ("<h2> Datum von" +dateUtil.getDateFormat (neuer Datum (), DateUtil.DATETIME_DEFAULT_FORMAT) +"</H2>"); strbuilder.append ("<h2> Folgendes sind die Details: </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 (); für (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>"); für (Kartenelement: Inhalt) {strbuilder.append ("<tr>"); für (Objekt 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: rechts/"> Beste Wünsche </h3>"); strbuilder.append ("</body> </html>"); //Log.info (strbuilder.toString ()); helper.setText (strbuilder.toString (), true); } catch (Ausnahme e) {log.Error ("sendhtmlmail error:", e); } MailSender.Send (msg); } / *** HTML -Mail -Spalten -Spalten -Datensatz senden* @param empfangenem Empfänger* @param obj Senden Sie Thema (Titel)* @param Inhalt E -Mail -Inhalt* / public void sendhtmlmailByItem (String empfangen, String Obj, Liste <string> Inhalt) {if (Inhalt.Isempty () ||! Mimemessage msg = mailsender.createMimememessage (); Versuchen Sie {MimemessageHelper Helper = new mimemessageHelper (msg, true, "utf-8"); // Lösen Sie das verstümmelte Problem Helper.setfrom (send_user_addr); if (empfangen.contains (";")) helper.setto (empfangen.Split (";")); sonst helfer.setto (empfangen); Helper.Setsubject (OBJ); strbuilder = new StringBuilder (); strbuilder.append ("<! docType html> <html> <kopf> <meta http-äquiv =/" content-type/"content =/" text/html; charset = utf-8/"> </head> <body style =/" padding: 3% 2%;/">"); strbuilder.append ("<h3> Diese Nachricht wird automatisch an das System gesendet. </h3>"); Strbuilder.Append ("<h3> Datum von" +dateUtil.getDateFormat (neuer Datum (), DateUtil.DATETIME_DEFAULT_FORMAT) +"</H3>"); strbuilder.append ("<h3> Folgendes sind die Details: </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>"); für (String -Element: Inhalt) {strbuilder.append ("<tr> <td>"+item+"</td> </tr>"); } Strbuilder.Append ("</tbody>"); strbuilder.append ("</table>"); strbuilder.append ("<h3 style =/" text-align: rechts; Schriftgewicht: Normal;/"> Beste Wünsche </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 (Ausnahme e) {log.Error ("sendhtmlmail error:", e); } MailSender.Send (msg); }}
Das obige soll die E -Mail -Funktion in eine Dienstklasse einbeziehen. Bei der Verwendung müssen Sie nur die aktuelle Klasse injizieren und direkt aufrufen. Das obige fasst zwei Methoden zusammen: Eine ist einfaches E -Mail -Senden und die andere ist eine E -Mail mit einer HTML -Tabelle. Wenn Sie Anhänge senden müssen, müssen Sie die Anhänge in MimemessageHelper (addAttachment ("Dateiname", Datei) einfügen. Da es hier keine tatsächliche Anforderung gibt, wird es weggelassen. Okay, die E -Mail -Sendungsfunktion wurde ausgefüllt. Lassen Sie uns hier den tatsächlichen Effekt sehen:
Die E -Mail -Funktion wurde implementiert. Jetzt werde ich über die Funktion der Dateikomprimierung sprechen. Es gibt ungefähr vier Arten von Komprimierungsfunktionsimplementierungen, nämlich:
A> Verwenden Sie die von java.util.zip bereitgestellte API -Komprimierung
B> Verwenden Sie die API -Komprimierung, die durch das Ant -Paket von Apache bereitgestellt wird (org.apache.tools.ant.taskdefs.zip)
C> API -Komprimierung von ZIP4J (net.lingala.zip4j) verwenden
D> Rufen Sie die Shell -Befehlskomprimierung des Hosts an
Hier müssen drei Probleme erwähnt werden:
A> Gewöhnlicher E -Mail -komprimierter chinesischer verstümmter Code (nicht auf Chinesisch unterstützt)
B> kann nach der Komprimierung nicht dekomprimieren (Dekompressionsfehler)
C> Problem beim Hinzufügen komprimierter Kennwörter zur Dateikomprimierung
Die Komprimierungsfunktion wurde tatsächlich entwickelt. Die obigen drei Punkte sind für Anfänger besonders problematisch. Hier werde ich die Probleme teilen, die ich bei der Entwicklung der Komprimierungsfunktion zuvor aufgenommen habe.
Unter Verwendung der Komprimierung des nativen Java.util-Pakets wird die komprimierte Datei in Chinesisch verstümmelt (es wird als Fehler in JDK bezeichnet) und der durch die Komprimierung implementierte Code ist relativ komplex (insbesondere für Kennwörter), insbesondere für die Überkomprimierung und Multi-File-Kompression.
Obwohl die Verwendung des von Apache bereitgestellten ZIP -Tools die oben genannten Probleme vermeidet, sollte beachtet werden, dass dieses Ameisenpaket mit Weblogic konflikt (ein Fehler wird während der Bereitstellung gemeldet) und kann das Kennwort nicht komprimieren. Wenn Sie Weblogic anstelle von Tomocat verwenden, müssen Sie dieses Problem achten.
Die Verwendung von Java zum Anrufen des Shell -Befehls des Hosts ist ebenfalls eine gute Wahl, erfordert jedoch das Schreiben von Shell -Befehlen. Es ist nicht sehr freundlich, auf der Windows -Plattform bereitzustellen, und das Portieren ist problematischer.
Schließlich empfehle ich für die oben genannten Ausgaben ZIP4J hier. Das Folgende ist auch eine Erklärung für die Komprimierungsinimposition von ZIP4J.
Zuerst müssen Sie Abhängigkeitspakete einführen:
<!-Komprimierung: Unterstützung für die Verschlüsselungskomprimierung-> <Depopentcy> <gruppe> net.lingala.zip4j </Groupid> <artifactid> ZIP4J </artifactid> <version> 1.3.2 </Version> </abhängig>
Darüber hinaus können Sie eine Komprimierung/Dekompressions -Toolklasse für eine einfache Verwendung einkapitulieren:
import net.lingala.zip4j.core.zipfile; import net.lingala.zip4j.exception.zipexception; import net.lingala.zip4j.model.zipparameters; importnetala.zip4j.util.zip4jconstants; Import org. java.io.file;/*** Diese Werkzeugklasse verwendet ZIP4J zur Komprimierung und Dekompression*/öffentliche Klasse Ziputil {// Das komprimierte Objekt private statische Zipparameter -Parameter deklarieren; // Dekomprimieren Dateiobjekt private statische 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); // Komprimierungsmethode (Standardmethode) Parameter.SetCompressionLevel (ZIP4JConstants.Deflate_Level_Normal); // Komprimierungsstufe (Standardstufe) // Komprimierungsverschlüsselungseinstellungen if (! Stringutils.isempty (Passwort)) {parameter.setencryptFiles (true); // ob die Dateiverschlüsselung festgelegt werden soll (Standard ist no) Parameter.SetEncryptionMethod (ZIP4JConstants.enc_Method_Standard); // Verschlüsselungsmethode (hier ist Standardkomprimierung) Parameter.SetPassword (password.therarArray ()); } try {zipfile zipfile = new ZipFile (Zipfilepath); // Wenn es sich um eine Datei handelt, komprimieren Sie sie direkt. Wenn es sich um einen Ordner handelt, durchqueren Sie die Dateien und komprimieren Sie sie alle if (neue Datei (SourceFilePath) .isfile ()) {Zipfile.SetFilenamecharSet ("GBK"); zipfile.addfile (neue Datei (SourceFilePath), Parameter); zurückkehren; } // Datei ff = neue Datei (SourceFilePath); Datei [] flst = neue Datei (SourceFilePath) .Listfiles (); System.out.println ("Anzahl der Dateien =>"+flst.length); für (Datei f: flst) {zipfile.setFilenamecharset ("gbk"); zipfile.addfile (f, Parameter); } Return true; } catch (zipException e) {e.printstacktrace (); false zurückgeben; } catch (Ausnahme -ID) {id.printstacktrace (); false zurückgeben; }} public static boolean unzip (String zipfile, String unzipdir) {try {ziputil.zipfile = new Zipfile (Zipfile); Ziputil.zipfile.setFilenamecharset ("GBK"); // Setzen Sie das Codierungsformat // Verwenden Sie die integrierte Methode, um zu überprüfen, ob die ZIP-Datei legal ist, einschließlich der Datei, ob es sich ZipException ("Die Datei ist illegal oder existiert nicht"); } // Im Vergleich zu Javas eigenen integrierten Dateipfad wird der Dateipfad automatisch generiert, ohne ziputil.zipfile.extractall (unzipdir) zu beurteilen. zurückkehren; } catch (ZipException e) {return false; }}} Die obige Komprimierungsmethode wird mit der Kennwortkomprimierungsfunktion geliefert, mit der einzelne Dateien oder Verzeichnisdateien komprimiert werden können. Im Vergleich zur nativen Implementierung ist es plötzlich viel erfrischend. Das einzige, was hier zu beachten ist, ist, dass die komprimierte Zieldatei nicht vor der Komprimierung durchdrungen werden darf, andernfalls wird ein Fehler gemeldet! Bei der Dekomprimierung müssen Sie außerdem auf die Dateicodierung achten und feststellen, ob die Datei vorliegt.
Zusammenfassen
Das obige ist die Springboot -Implementierung des Hinzufügens von E -Mail -Senden- und Komprimierungsfunktionen, die der Editor Ihnen vorgestellt hat. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten!