2010-06-19

GAE/J + Slim3 : メール受信アプリを作ってみる(4)

今回はMailServiceを作成する。
前回作成したテスト MailServiceTest#receive_plainText_UTF8()をパスするように MailService#receive()を実装する。
◎まずはコンパイルエラーをなくすように必要最低限のコードを書いてみる。
public MailItem receive(String pAddress, InputStream pInputStream) {
    MailItem mailItem = null;
    return mailItem;
}
これで、コンパイルは通るのでテストを実行してみる。
結果は...NullPointerExceptionでRed、receive()の戻り値がnullなので当たり前だな。
◎次はテストをパスするようにコードを書く。
public MailItem receive(String pAddress, InputStream pInputStream) {
    MailItem mailItem = null;
    Properties prop = new Properties();
    Session session = Session.getDefaultInstance(prop, null);

    try {
        MimeMessage message = new MimeMessage(session, pInputStream);
        mailItem = new MailItem();
        mailItem.setFrom(message.getFrom()[0].toString());
        mailItem.setTo(message.getRecipients(RecipientType.TO)[0].toString());
        mailItem.setSubject(message.getSubject());
        InputStream in = (InputStream)message.getInputStream();
        Reader reader = new InputStreamReader(in);
        BufferedReader bufReader = new BufferedReader(reader);
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = bufReader.readLine()) != null) {
            sb.append(line + "\n");
        }
        mailItem.setBody(sb.toString());
        Datastore.put(mailItem);
    } catch (MessagingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return mailItem;
}
◎コンパイルは通っているので、テストを実行してみる。もちろんGreen、これで基本パターンはOK (^_^)v
次回は通常のメールと同じように文字コードが"ISO-2022-JP"の場合を考えてみる。

0 件のコメント: