S2Maiでメールを送るの巻き

http://s2mai.sandbox.seasar.org/ja/を読むと簡単に送れた。
・・・だとネタにも何にもならないので・・・少し詳細に書きます。

trouble.dicon を書きます。
今回は trouble というプロジェクトで作成したのでこうなりましたが、何でもいいみたいです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
    "http://www.seasar.org/dtd/components23.dtd">
<components>

    <include path="s2mai.dicon"/>
    
    <component class="trouble.util.IMai">
        <aspect>s2MaiInterceptor</aspect>
    </component>
    
</components>

trouble.util.IMai.java インターフェイスを作成します。

package trouble.util;

import trouble.dto.MaiDto;

public interface IMai {
    void sendMail(MaiDto dto);
}

trouble.dto.MaiDto.java を作成します。


package trouble.dto;

import java.util.List;

import javax.mail.internet.InternetAddress;

public class MaiDto {
private String title
private String toName;
private String ccName;
:

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}
:
}

長いので略してます。
実際は下記のテンプレートに合わせてプロパティ、アクセサメソッドが定義されます。

テンプレートは trouble.util におきます。
sendMail というインターフェイスから呼ばれるので、IMai_sendMail.ftl という名前になります。

Subject: 【${data.matterName}】修正待ちの不具合があります。

☆TO ${data.toName} さん

**************************************
* 【案件名 :${data.matterName}】
**************************************
 
 ${data.registUserName}さんから修正依頼があります。
 『${data.title}』が修正待ちの状態にあります。

 【品質ID】
   ${data.number}

 【登録者】: ${data.registUserName} (${data.registUser})

 【URL】
   ${data.url}

*FreeMaker の仕様なのか文章の最後に4つほど改行が入ります。

で実際に送るには、適当な action から呼び出します。
こんな感じで、


try {
S2Container container = S2ContainerFactory.create("trouble.dicon");
IMai mai = (IMai) container.getComponent(IMai.class);
MaiDto dto = new MaiDto();

// From
dto.setFrom(new InternetAddress("postmaster@exapmle.com", "ほげほげ"));

// To
if (troubleForm.sendUserIdTo != null) {
getToHead(dto);
}
:

// 本文
dto.setTitle(troubleForm.title);
dto.setNumber(troubleForm.number);
dto.setMatterName(menuDto.matterName);
dto.setRegistUserName(loginDto.name);
:

// 送信
mai.sendMail(dto);
}
catch (Exception ex) {
ex.printStackTrace();
}

ちゃんと送れたみたいです (^_^)v