「JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)」の詳細記事: Javaってまだいけますか
いっぱいいっぱいで無理なので学んだ事をいちいちメモっていくブログです。
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Navigation
- 前の記事: Unicode対応 文字コード表
- 次の記事: Java SE 5/6を勉強するなら
JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)
JavaMailではまったのでメモ。
以下のようなメール送信クラスを作成してメール送信を行おうとしました。
で、コンストラクタで外部からSMTPホスト名とPORT名を与えて送信先メールサーバを切り替えようとしたけど、いくら外から設定しても最初に設定した送信先から切り替わらず・・・。
調べたところ、これが曲者でした。
getDefaultInstanceがSessionのSingletonオブジェクトを返すようになっていた為、最初の設定がずっとキャッシュされてたんですね。。。
以下のように変えたら毎回設定が反映されるようになりました。
※getInstanceの中身はSessionをnewして返してるだけ。
JavaMail
以下のようなメール送信クラスを作成してメール送信を行おうとしました。
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.validator.GenericValidator;
public class Mailer {
private String smtpHost;
private String smtpPort;
private String fromAddress;
public Mailer(String smtpHost, String smtpPort, String fromAddress) {
this.smtpHost = smtpHost;
this.smtpPort = smtpPort;
this.fromAddress = fromAddress;
}
public void send(String to, String cc, String subject, String body) {
try {
// メール送信準備
Properties props = new Properties();
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.port", smtpPort);
props.put("mail.host", smtpHost);
Session session = Session.getDefaultInstance(props, null);
// メール作成
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.addFrom(InternetAddress.parse(fromAddress));
mimeMessage.setRecipients(Message.RecipientType.TO, InternetAddress
.parse(to));
if (!GenericValidator.isBlankOrNull(cc)) {
mimeMessage.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc));
}
mimeMessage.setSubject(subject, "iso-2022-jp");
mimeMessage.setText(body, "iso-2022-jp");
mimeMessage.setSentDate(new Date());
// 送信
Transport.send(mimeMessage, mimeMessage.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
}
}
}
で、コンストラクタで外部からSMTPホスト名とPORT名を与えて送信先メールサーバを切り替えようとしたけど、いくら外から設定しても最初に設定した送信先から切り替わらず・・・。
調べたところ、これが曲者でした。
Session session = Session.getDefaultInstance(props, null);
getDefaultInstanceがSessionのSingletonオブジェクトを返すようになっていた為、最初の設定がずっとキャッシュされてたんですね。。。
以下のように変えたら毎回設定が反映されるようになりました。
Session session = Session.getInstance(props);
※getInstanceの中身はSessionをnewして返してるだけ。
JavaMail
PR
Navigation
- 前の記事: Unicode対応 文字コード表
- 次の記事: Java SE 5/6を勉強するなら
「JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)」にトラックバックする
「JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)」へのトラックバック
「JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)」へのコメント
「JavaMailでjavax.mail.SessionがSingletonの罠(仕様ですけど)」にコメントする
Navigation
- 前の記事: Unicode対応 文字コード表
- 次の記事: Java SE 5/6を勉強するなら
- インデックスページ
- このページの上部へ
menu
ブログ内検索
カテゴリー
カウンター
忍者アド
リンク
最新CM
[07/17 セバ]
[12/27 NONAME]
最新記事
(10/15)
(10/01)
(08/12)
(08/12)
(08/11)
プロフィール
HN:
takacy.k
年齢:
45
性別:
男性
誕生日:
1979/08/13
趣味:
酒
自己紹介:
個人的なメモですので、投稿内容について真偽を保証するものではありません。また、当ブログの内容をご利用になったことによる(以下略)