メール送信クラスを作ろう



自分で簡単なフリーウェアを作って配布しているとき、「あるといいな」と思うのが「メールを送信する機能」です。バグが見つかったり、使った感想などを送るとき、「このメールアドレス宛に送ってください」などというより、メニューを選んでメッセージを入力するとそのまま送信される、なんていうほうがスマートですね。

今回作成するのは、ごくシンプルなメール送信プログラムです。プログラムを実行すると、いくつかの入力フィールドが表示されたウインドウが現れます。ここでSMTPサーバ、送信元、送信先、タイトル、メールの本文をそれぞれ記述して「送信」ボタンを押すと、メールを送信します。1つのクラスだけで完結していますので、自分のプログラムの中からこのクラスをnewして利用することも簡単にできるでしょう。
プログラムを実行すると、サーバ、送信元、送信先、タイトル、メッセージを入力するウインドウが現れます。ここで記入してボタンを押せばメールが送信されます。

Javaのエンタープライズ版であるJ2EE(Java2 Enterprise Edition)には、「JavaMail」といってメール送信のライブラリが付属しています。が、Javaプログラムを実行するために用意されているJREにはこの機能はありません。そのため「普通のJ2SEではメールの送信はできないんだ」と思っている人も多いかもしれません。が、実はそんなことはありません。とはいえ、J2SEの一般的なドキュメントを調べても、そういう機能は見つかりません。

J2SEには、一般的に公開されているjavaやjavaxで始まるパッケージの他に、sunで始まるパッケージが含まれています。これらは正式に公開されたものではないのですが、その中にメール送信のための機能なども含まれているのです。これを利用すれば、SMTPサーバを利用したメールの送信を行うことができます。では、基本的な手順を整理してみましょう。
●必要なクラス
sun.net.smtp.SmtpClient

●利用の基本手順
// インスタンスを作成する
SmtpClient 変数 = new SmtpClient( サーバの指定 );

// 送信元・送信先を指定する
[SmtpClient].from( 送信元 );
[SmtpClient].to( 送信先 );

// メッセージ用のストリームを用意する
PrintStream 変数 = [SmtpClient].startMessage();

// メッセージの出力
[PrintStream].println( メッセージ );

// ストリームのフラッシュ
[PrintStream].flush();

// ストリームを閉じる
[PrintStream].close();

これらは例外を発生させる可能性がありますので、try内で実行するなどの処理が必要になります。また、引数に指定している「サーバの指定」「送信元」「送信先」「メッセージ」などはすべてStringで指定します。メッセージの送信にPrintStreamを取得してこれを介して行う必要がありますが、この点だけ注意すれば、扱いはそれほど難しくはなさそうですね。