はじめに
* 以下の関連記事でメール送信することはできたが、本文が直書きなので、 外出しファイルで実装したいhttp://blogs.yahoo.co.jp/dk521123/36230453.html
http://blogs.yahoo.co.jp/dk521123/36230816.html
できれば、 * 件名も外出ししたい * 日本語だけでなく、国際化にも将来的に対応できるようにしたい が、まずは本文だけを考える # 件名を加えた考慮については、以下の関連記事を参照のこと。http://blogs.yahoo.co.jp/dk521123/36246607.html
構成
■ EmailParamCreator : メール・パラメータ作成クラス * 本文 => 本文「Body」は、Velocityテンプレートを使う => インターフェイスとしては、 public static String getMailBody(String templatePath, String templateFileName, IMailBean bean;
準備
* velocity-X.X-dep.jar(今回は「velocity-1.7-dep.jar」)をインポートしておくこと * 詳細は以下の関連記事を参照のこと。http://blogs.yahoo.co.jp/dk521123/34456704.html
サンプル
SampleTemplete.vm
* Velocityを利用してメールテンプレート$mailBean.userName 様 $mailBean.date この度はお買い上げ頂き、誠にありがとうございます。 【商品】 #foreach ($productName in $mailBean.productNames) 商品名 : $productName #end 以上
IMailBean.java
public interface IMailBean { }
SampleMailBean.java
import java.util.ArrayList; import java.util.List; public class SampleMailBean implements IMailBean { private String userName; private String date; private List<String> productNames; public SampleMailBean() { this.productNames = new ArrayList<>(); } public void setUserName(String userName) { this.userName = userName; } public String getUserName() { return userName; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public List<String> getProductNames() { return productNames; } public void addProductNames(String productName) { productNames.add(productName); } }
EmailParamCreator.java
import java.io.IOException; import java.io.StringWriter; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; public class EmailParamCreator { private static final String DEFAULT_ENCODING = "UTF-8"; public static String getMailBody(String templatePath, String templateFileName, IMailBean bean) throws IOException { try (StringWriter writer = new StringWriter();) { Velocity.setProperty("file.resource.loader.path", templatePath); Velocity.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.NullLogSystem"); Velocity.init(); VelocityContext context = new VelocityContext(); context.put("mailBean", bean); Template tmplate = Velocity.getTemplate(templateFileName, DEFAULT_ENCODING); tmplate.merge(context, writer); return writer.toString(); } } }
Main.java
呼び出し側import java.io.IOException; public class Main { public static void main(String[] args) { SampleMailBean bean = new SampleMailBean(); bean.setUserName("○井"); bean.setDate("2016-07-23"); bean.addProductNames("C# Program Book"); bean.addProductNames("Java Program Book"); bean.addProductNames("C++ Program Book"); try { System.out.println(EmailParamCreator.getMailBody("./conf", "SampleTemplete.vm", bean)); } catch (IOException ex) { ex.printStackTrace(); } } }
出力結果
○井 様 2016-07-23 この度はお買い上げ頂き、誠にありがとうございます。 【商品】 商品名 : C# Program Book 商品名 : Java Program Book 商品名 : C++ Program Book 以上
参考文献
https://codezine.jp/article/detail/72http://tech.ewdev.info/2014/03/1744/
http://javatechnology.net/java/velocity-basic/
* Velocityの設定キー
http://www.techscore.com/tech/Java/ApacheJakarta/Velocity/10/
関連記事
Velocity に関するトラブルシューティング
* VelocityExceptionの対応http://blogs.yahoo.co.jp/dk521123/36257386.html
Velocityを利用してメールテンプレート機能の実装を考える [2]
http://blogs.yahoo.co.jp/dk521123/36246607.htmlApache Velocity関連
Apache Velocity ~入門編~http://blogs.yahoo.co.jp/dk521123/34456704.html
Apache Velocity ~VTL(Velocity Template Language)編~
http://blogs.yahoo.co.jp/dk521123/34463879.html
Velocity を Servlet で使用するには
http://blogs.yahoo.co.jp/dk521123/34460303.html
メール送信関連
Java で、 Email を送るには... ~ JavaMail / テキストメール編 ~http://blogs.yahoo.co.jp/dk521123/36230453.html
Java で、 Email を送るには... ~ JavaMail / 添付ファイル付きメール編 ~
http://blogs.yahoo.co.jp/dk521123/36230816.html