今回は電子メールの送信機能についてのみ話しましたが、コンテンツの不足を恐れていたので、ファイル圧縮機能の説明を追加しました。
最初に、電子メールが送信されます。電子メール機能には、スプリングブートに対応する依存関係があります。これ:
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-mail </artifactid> </dependency>
電子メール機能の開発は、スプリングブートでは非常に簡単です。ここで、開発コンテンツを要約します。
>依存関係パッケージを追加します
b>メールの基本パラメーターを構成します(ymalまたはプロパティ)
c> JavaMailsenderをサービスに挿入し、関連する方法を呼び出します
ただし、ここでは問題がある可能性があります。つまり、特定のサーバーが展開されると、サーバーが電子メールサービスポートと通常のメールセキュリティの問題をブロックします。ここで説明するときに解決策を与えます。
まず、プロジェクトのpom.xmlに電子メールコンポーネントを紹介する必要があります。コンポーネントバージョンは、スプリングブートバージョンに対応する必要があります(書くことはできません。ここで省略します):
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-mail </artifactid> </dependency>
次に、構成ファイルで電子メールの基本パラメーターを構成することです。
スプリング:郵便:ホスト:smtp.exmail.qqc.com username:[email protected]パスワードパスワード:パスワードデフォルト - エンコード:UTF-8 SSL:信頼:SMTP.EXMAIL.QQ.comプロパティ:メール:SMTP:auth:true #does認証ニーズソケットファクトリー:javax.net.net.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl.sl. #USE SMTP465ポート
パラメーターを構成するときは、YAML構成形式を提供するため、インデントに注意する必要があります。プロパティ構成の場合、ほぼこのようなものです(例):spring.mail.host:smtp.exmail.qq.com。各子供は完全な形式です。最初は、プロパティアイテム(Series、SSL、ポート)の下の構成を省略しました。その後、サーバーがメールの25番目のポートをブロックしているため、ローカルで可能になりますが、サーバーでは機能しないため、メールサービスポートを465に指定する必要があります。ここではQQメールボックスを使用しています。 163または他のメールボックスを使用している場合は、サービスプロバイダーがサポートするポートを自分で確認する必要があります。電子メールのセキュリティの問題については、ここで2つを宣言する必要があります。1つはSSLトラストとメールのソケットファクトリーです。詳細については、上記の赤いセクションをご覧ください。上記の構成はQQメールボックスでのみ有効であり、他のメールボックスも適用できることを保証するものではありません。
わかりました、構成が完了しました。ここでは、特定の実装クラスの書き込みを開始します。
xxx.common.util.dateutil; Import org.apache.commons.lang3.stlingutils; import org.slf4j.logger; Import org.slf4j.loggeractory; Import org.springframework.beans.factory.annotation.Autowired; org.springframework.simplemailmessage; Import org.springframework.mail.javamail.javamailsender; Import org.springframework.mail.javamail.mimemessagehelper; Import org.sprameframework.stereoty.service.service.mais.mail.mais.mais.mais.mabice.mess.mais.mabice.mess.mabice.service java.util.date; import java.util.list; import java.util.map; @servicepublic class mailservice {private static final logger log = loggerfactory.getlogger(mailservice.class); @value( "$ {spring.mail.username}")private string send_user_addr; @autowired private javamailsender mailsender; /*** simple email* @param受信受信者* @param obj send topic* @param content email Content*/public void sendsimplemail(string、string obj、string content){if(!stringutils.isnotblank(content)||!stringutils.isnotblank(受信)); message.setfrom(send_user_addr); if(receive.contains( ";"))message.setto(receive.split( ";")); else message.setto(受信); message.setsubject(obj); message.settext(content); try {mailsender.send(message); log.info( "Simple Mail Send Success!"); } catch(例外e){log.error( "sendsimplemailエラー!"、e); }} private stringbuilder strbuilder; / *** HTMLメールマルチリストリストを送信するフォームmimemessage msg = mailsender.createmimemessage(); try {mimemessagehelper helper = new mimemessagehelper(msg、true、 "utf-8"); //文字化けの問題を解決するhelper.setfrom(send_user_addr); if(receive.contains( ";"))helper.setto(receive.split( ";")); else helper.setto(受信); helper.setsubject(obj); strbuilder = new StringBuilder(); strbuilder.append( "< strbuilder.append( "<h2>このメッセージはシステムに自動的に送信されます。</h2>"); strbuilder.append( "<h2> send date by" +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>"); for(マップ項目: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/"> best wishes </h3>"); strbuilder.append( "</body> </html>"); //log.info(strbuilder.toString()); helper.settext(strbuilder.toString()、true); } catch(例外e){log.error( "sendhtmlmailエラー:"、e); } mailsender.send(msg); } / *** HTMLメールシングル列レコードフォームを送信* @param受信受信者* @param obj送信トピック(タイトル)* @paramコンテンツ電子メールコンテンツ* / public void sendhlmailbyitem(string、string obj、list <string> content){if(content.isempty()||! mimemessage msg = mailsender.createmimemessage(); try {mimemessagehelper helper = new mimemessagehelper(msg、true、 "utf-8"); //文字化けの問題を解決するhelper.setfrom(send_user_addr); if(receive.contains( ";"))helper.setto(receive.split( ";")); else helper.setto(受信); helper.setsubject(obj); strbuilder = new StringBuilder(); strbuilder.append( "< strbuilder.append( "<h3>このメッセージはシステムに自動的に送信されます。</h3>"); strbuilder.append( "<h3> send date by" +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;/"> best wishes </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(例外e){log.error( "sendhtmlmailエラー:"、e); } mailsender.send(msg); }}
上記は、電子メール関数をサービスクラスにカプセル化することです。それを使用する場合、現在のクラスを注入して直接呼び出すだけです。上記は2つの方法をカプセル化します。1つは簡単な電子メールの送信で、もう1つはHTMLテーブルのある電子メールです。添付ファイルを送信する必要がある場合は、添付ファイルをmimemessagehelper(addattachment( "file name"、file))メソッドに配置する必要があります。ここには実際の要件がないため、省略されています。さて、電子メール送信機能が完了しました。ここで実際の効果を見てみましょう:
電子メール機能が実装されています。次に、ファイル圧縮機能について説明します。圧縮関数の実装には、約4種類があります。
a> java.util.zipによって提供されるAPI圧縮を使用します
b> ApacheのAntパッケージ(org.apache.tools.ant.taskdefs.zip)によって提供されるAPI圧縮を使用します
c> zip4j(net.lingala.zip4j)によって提供されるAPI圧縮を使用します
d>ホストのシェルコマンド圧縮を呼び出します
ここに言及する必要がある3つの問題があります:
A>通常の電子メール圧縮中国語の文字化けコード(中国語ではサポートされていません)
b>圧縮後に減圧できません(減圧エラー)
c>ファイル圧縮の圧縮パスワードを追加する問題
圧縮関数が実際に開発されています。上記の3つのポイントは、初心者にとって特に面倒です。ここでは、以前に圧縮機能の開発で遭遇した問題を共有します。
ネイティブjava.utilパッケージによって提供される圧縮を使用して、圧縮ファイルが中国語で使用される場合、それは文字化けされ(JDKのバグと言われています)、圧縮によって実装されたコードは比較的複雑です(特にパスワードの設定)、特にクロスディレクトリ圧縮とマルチファイル圧縮の場合。
Apacheが提供するZIPツールを使用すると、上記の問題が回避されますが、このANTパッケージはWeblogicと競合すること(エラーが展開中に報告される)とパスワードを圧縮できないことに注意する必要があります。 Tomocatの代わりにWeblogicを使用している場合は、この問題に注意を払う必要があります。
Javaを使用してホストのシェルコマンドを呼び出すことも良い選択ですが、シェルコマンドを書く必要があります。 Windowsプラットフォームに展開することはそれほどフレンドリーではなく、移植はより面倒です。
最後に、上記の問題については、ここでZIP4Jをお勧めします。以下は、ZIP4Jの圧縮実装の説明でもあります。
まず、依存関係パッケージを導入する必要があります。
<! - 圧縮:暗号化圧縮のサポート - > <依存関係> GroupId> net.lingala.zip4j </groupId> <artifactid> zip4j </artifactid> <バージョン> 1.3.2 </version> </dependency>
さらに、使いやすいように圧縮/減圧ツールのクラスをカプセル化します。
net.lingala.zip4j.core.zipfile; import net.lingala.zip4j.exception.zipexception; intempt net.lingala.zip4j.model.zipparameters; Import net.lingala.zip4j.util.zip4jconstants; Import org.springframework.utilwork.utilwork.utilwork.utilwork java.io.file;/***このツールクラスは、圧縮と減圧にzip4jを使用します*/public class ziputil {//圧縮オブジェクトのprivate static zipparametersパラメーターを宣言します。 //ファイルオブジェクトのprivate static zipfile zipfileを減圧します。 / ** * * @param sourcefilepath圧縮ファイルのパス(シングルファイル、フォルダー) * @param zipfilepath圧縮ファイルパス * @paramパスワード圧縮パスワード * @return圧縮された圧縮:真、圧縮失敗:false */ public static boolean singlefilecompress(String filepath、String Zipfilepath、String Passwer) parameters.setCompressionMethod(zip4jconstants.comp_deflate); //圧縮法(デフォルトの方法)パラメーター。SetCompressionLevel(ZIP4JCONSTANTS.DEFLATE_LEVEL_NORMAL); //圧縮レベル(デフォルトレベル)//コンプレッション暗号化設定if(!stringutils.isempty(password)){parameters.setEncryptfiles(true); //ファイル暗号化を設定するかどうか(デフォルトはno)パラメーター。SetEncryptionMethod(ZIP4JCONSTANTS.ENC_METHOD_STANDARD); //暗号化方法(ここに標準圧縮です)パラメーター.setPassWord(password.tochararray()); } try {zipfile zipfile = new zipfile(zipfilepath); //ファイルの場合は、直接圧縮します。フォルダーの場合、ファイルをトラバースしてすべてを圧縮します(new file(sourcefilepath).isfile()){zipfile.setfilenamecharset( "gbk"); zipfile.addfile(new file(sourcefilepath)、パラメーター); trueを返します。 } // file ff = new file(sourcefilepath); file [] flst = new file(sourcefilepath).listfiles(); system.out.println( "ファイル数=>"+flst.length); for(file f:flst){zipfile.setfilenamecharset( "gbk"); zipfile.addfile(f、パラメーター); } trueを返します。 } catch(zipexception e){e.printstacktrace(); falseを返します。 } catch(exception id){id.printstacktrace(); falseを返します。 }} public static boolean unzip(string zipfile、string unzipdir){try {ziputil.zipfile = new zipfile(zipfile); ziputil.zipfile.setfilenamecharset( "gbk"); //エンコード形式を設定しますファイルは違法または存在しません」); } // Java独自の内蔵と比較して、Ziputil.zipfile.extractall(unzipdir)を判断せずにファイルパスが自動的に生成されます。 trueを返します。 } catch(zipexception e){return false; }}}上記の圧縮方法には、単一のファイルまたはディレクトリファイルを圧縮できるパスワード圧縮機能が搭載されています。ネイティブの実装と比較して、突然の爽やかになります。ここで注意すべき唯一のことは、圧縮された圧縮前に圧縮ターゲットファイルを侵入してはならないことです。そうしないと、エラーが報告されます!さらに、減圧するときは、ファイルエンコードに注意を払い、ファイルが存在するかどうかを判断する必要があります。
要約します
上記は、編集者が紹介した電子メール送信および圧縮機能を追加するスプリングブートの実装です。それがあなたに役立つことを願っています。ご不明な点がございましたら、メッセージを残してください。編集者は時間内に返信します!