「第5章 JAVAを使ってe-mailクライアントを実装する」を読む

実習JAVAの「第5章 JAVAを使ってe-mailクライアントを実装する」を読んだ。

JavaMailというライブラリを入れる必要があるらしいので、JavaMailからダウンロードしてきた。

ダウンロード後、解凍してビルドパスに追加した。
本にはこの他にJAF(JavaBeans Activation Framework)という物が必要とあるが、
JavaSE6移行なら既に内容に含まれているらしい。


ちょっとコードが長いというか大嫌いなレイアウト系が入っていたので面倒くさかった(´・ω・`)
しかも実行してみたら何故かうまく接続できない(´・ω・`)
しょうがないから、全てのファイルをダウンロードしてきた配布ファイルに差し替えて実行…


やっぱり接続できないヽ(`Д´)ノムッキー
usernameかpasswordの問題かとtelnetで試してみると普通にログインできた…。
そういえば何かの時にさくらからメールが来てポート番号を変えたなと
設定をチェックするもPOP3のポート番号は110のままだった。変えたのはsmtpの方か。


デバッグでこける寸前の流れを見てみる。

 // e-mailサーバに接続する
URLName urln = new URLName(connectionUrl.toString());
store = session.getStore(urln);
store.connect();

のところだ。このconnectionUrlは

// 「接続」ダイアログの設定から接続URLを構築する
StringBuffer connectionUrl = new StringBuffer();
connectionUrl.append(dialog.getType() + "://");
connectionUrl.append(dialog.getUsername() + ":");
connectionUrl.append(dialog.getPassword() + "@");
connectionUrl.append(dialog.getServer() + "/");

というように「接続」ダイアログで入力された値をStringBufferにappendしている。
URLName(String)のコンストラクタは「文字列から URLName を構築します。」とあるが、よくよくデバッグ見るとconnectionUrl.toString()にはあるパスワードがurlnが抜け落ちている。これが仕様なのか、入力文字列がいけないのかわからないが、別のコンストラクタで各要素を個別に指定してみた。

URLName urln = new URLName(dialog.getType(),dialog.getServer(),-1,"",dialog.getUsername(),dialog.getPassword());

-1はデフォルトポート番号を指定している。別のポート番号を使用する場合はここを指定すればいいようだ。””はファイル?を指定する箇所らしいがこれはよくわからない。


キタ━━ヽ( ゚∀゚)ノヽ(゚∀゚ )ノ━━ !!!!!
何処かで仕様が変わってしまったのか、ユーザー名に独自ドメインが付加されているのがいけないのかよくわからないが取りあえずPOP3でのメール取得はできた。


続いてSMTPで送信……エラー(´・ω・`)
まあこれはおそらくポート番号であろうと当たりをつける。

// SMTPサーバとのJavaMailセッションを初期化する
Properties props = new Properties();
props.put("mail.smtp.host", dialog.getSmtpServer());
props.put("mail.smtp.port", 587);

という風にPropertiesに設定を追加してみる。


キタワァ*・゜゚・*:.。..。.:*・゜(n ・∀・)n゚・*:.。..。.:*・゜゚・* !!!!!
これは一番簡単な機能だから、自分専用メールクライアントを作りあげるには色々かかりそうだが、
まあ大体の流れはわかった(・∀・)