2008/6/4 水曜日 by kouichi
Javaの起動時にjarファイルをクラスパスに設定することが多いですが、特定のディレクトリ以下のjarファイルを設定したいというケースが結構あると思います。
その場合ひとつひとつ
LOCALCLASSPATH=$LOCALCLASSPATH:lib/mail.jar
LOCALCLASSPATH=$LOCALCLASSPATH:lib/log4j.jar
・・・としていては、クラスファイルが増えた場合などに書き換えるのが大変なので、自分は以下のようにしています。
BASE_DIR=実行ディレクトリ
LOCALCLASSPATH=$BASE_DIR
LIBPATH=$BASE_DIR/lib
for f in $LIBPATH/*.jar;do
LOCALCLASSPATH=$LOCALCLASSPATH:$f;
done
java -classpath $LOCALCLASSPATH 実行クラス
使い回しが結構利くので便利です。
Posted in Java, サーバ関連 | No Comments
2008/5/29 木曜日 by kouichi
昨日のサンプルコードだと、送信先に
undisclosed-recipients:
と表示されてしまうので、修正しました。
Properties properties = new Properties();
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");
// session作成
Session session = Session.getDefaultInstance(properties,null);
MimeMessage message = new MimeMessage(session);
// 送信先アドレス
InternetAddress[] to = { new InternetAddress("yyy@yyy.jp") }; // ←したから移動
message.setRecipients(Message.RecipientType.TO, to); // ←ここ追加
// 送信元アドレス
message.setFrom(new InternetAddress("xxx@xxx.jp"));
// サブジェクト
message.setSubject("subject","iso-2022-jp");
// メール本文
message.setText("text","iso-2022-jp");
// 送信日付
message.setSentDate(new Date());
// サービス接続
Transport tp = session.getTransport("smtp");
tp.connect( "SMTPホスト", SMTPポート, ユーザーID, パスワード );
// 送信先アドレス
tp.sendMessage( message, to );
ちなみに
message.setHeader("To", "yyy@yyy.jp");でも良かったですが、行儀的には↑でしょうか。
MimeMessage#setRecipientsで設定した値は単純にメールヘッダのToに指定されるだけ、Transport#sendMessageに指定したほうが実際に送られる送信先アドレスになります。
例えば、MimeMessage#setRecipientsに「x@xxx.jp」を指定、Transport#sendMessageに「y@yyy.jp」を指定してみると、「y@yyy.jp」にメールが届いて、受信したメールの宛先欄には「x@xxx.jp」が表示されました。
#でも、別にしとくとスパム扱いされそうなので、通常は同じアドレスですね。
勉強になりました。
後、HTMLメールを送信する場合ですが、
message.setText("text","iso-2022-jp");を
message.setContent("<html><b>html</b></html>","text/html; charset=iso-2022-jp");にすればOK
なお、エンコードもJavaMail内で行ってくれるようなので、アプリ側で送信するHTMLをiso-2022-jpエンコードする必要はないようです。
Posted in Java | 1 Comment
2008/5/28 水曜日 by kouichi
SMTPの25番ポートを使えないプロバイダが最近増えていると思います。
この場合ポートを指定したり、認証後にメールを送信しなければならないわけですが、JavaMailで実装してみました。
以下のような感じです。
Properties properties = new Properties();
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");
// session作成
Session session = Session.getDefaultInstance(properties,null);
MimeMessage message = new MimeMessage(session);
// 送信元アドレス
message.setFrom(new InternetAddress("xxx@xxx.jp"));
// サブジェクト
message.setSubject("subject","iso-2022-jp");
// メール本文
message.setText("text","iso-2022-jp");
// 送信日付
message.setSentDate(new Date());
// サービス接続
Transport tp = session.getTransport("smtp");
tp.connect( "SMTPホスト", SMTPポート, ユーザーID, パスワード );
// 送信先アドレス
InternetAddress[] to = { new InternetAddress("yyy@yyy.jp") };
tp.sendMessage( message, to );
2つだけ特筆事項を
その1
Properties properties = new Properties();は、よくサンプルなどで
Properties properties = System.getProperties();となっていますが、newするほうをお勧めします。
Systemプロパティを書き換えると、複数のアプリが動作するVMではメールの設定が上書きされてしまいます。
その2
// SMTPサーバーのアドレスを指定
properties.put("mail.smtp.auth","true");は
// SMTPサーバーのアドレスを指定
boolean auth = true;
properties.put("mail.smtp.auth",auth);ではNGで、文字列を設定する必要がありました。
環境によってはポート指定や認証が必要ない場合もありますがので、使い分けしていただければと思います。
2008/5/29 追記
サンプルコードを一部修正しました。
こちらをご参照ください。
Posted in Java | 1 Comment