実装案
http://blogs.yahoo.co.jp/dk521123/34463879.htmlを眺めていたら「##」がコメントアウトになるので、例えば、 ・件名は、一行目のコメント文に書く と決めておけば実現できそう。
サンプル
SampleTemplete.vm
$mailBean.userName 様 $mailBean.date この度はお買い上げ頂き、誠にありがとうございます。 【商品】 #foreach ($productName in $mailBean.productNames) 商品名 : $productName #end 以上
IMailBean.java / SampleMailBean.java
http://blogs.yahoo.co.jp/dk521123/36245554.htmlと同じなので省略
EmailParamCreator.java
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; import java.nio.file.Path; import java.nio.file.Paths; import java.util.AbstractMap.SimpleEntry; 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(); } } // ★ここ★ public static String getMailSubject(String templatePath, String templateFileName) throws IOException { Path path = Paths.get(templatePath, templateFileName); try (BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(new FileInputStream(new File(path.toString())), DEFAULT_ENCODING));) { String firstLine = bufferedReader.readLine(); String firstLineWithoutComment = firstLine.replaceFirst("##", ""); return firstLineWithoutComment.trim(); } } // ★ここ★ public static SimpleEntry<String, String> getMailSubjectAndBody(String templatePath, String templateFileName, IMailBean bean) throws IOException { String mailSubject = EmailParamCreator.getMailSubject(templatePath, templateFileName); String mailBody = EmailParamCreator.getMailBody(templatePath, templateFileName, bean); return new SimpleEntry<>(mailSubject, mailBody); } }
Main.java
呼び出し側import java.io.IOException; import java.util.AbstractMap.SimpleEntry; 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 { SimpleEntry<String, String> mailSubjectAndBody = EmailParamCreator.getMailSubjectAndBody("./conf", "SampleTemplete.vm", bean); System.out.println(mailSubjectAndBody.getKey()); System.out.println(); System.out.println(mailSubjectAndBody.getValue()); } catch (IOException ex) { ex.printStackTrace(); } } }
出力結果
【サンプルタイトル】お買い上げ、ありがとうございます。 ○井 様 2016-07-23 この度はお買い上げ頂き、誠にありがとうございます。 【商品】 商品名 : C# Program Book 商品名 : Java Program Book 商品名 : C++ Program Book 以上
関連記事
Velocity に関するトラブルシューティング
* VelocityExceptionの対応http://blogs.yahoo.co.jp/dk521123/36257386.html
Velocityを利用してメールテンプレート機能の実装を考える [1]
http://blogs.yahoo.co.jp/dk521123/36245554.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