JavaMailメール送信でSMTPサーバを指定するもlocalhostへ接続

 メール送受信をする処理が動いているサーバを別のインフラに移動したいという事で、移行作業し稼働させたところ、メール送信が出来なくなっている事が判明。

 正確には、メール送信処理は複数あり、単純なJavaアプリとして稼働しているプロセスでは問題が無く、SpringbootでWebサービスとして稼働している処理のみが問題となっています。どちらも元のサーバ上では何ら問題なく動作していました。新環境ではJavaアプリのテストはしてましたが、問題無かったのでSpringboot側は割愛してしまいました。なお、Javaアプリと比べて、Springboot側はjavamailのバージョンがSpringbootのバージョンに引きずられて微妙に古い状況(1.6.1)。

 アプリ的には正常終了扱いとなっており、どこでメールが止まっているのかと調べてみると、mail.smtp.hostで指定しているSMTPサーバにはメール送信ログは無く、なぜか移行先サーバー内の/var/log/maillogにログが、、
Network is unreachable で終わっています。

 どうやら指定しているSMTPサーバでなく、localhostに対しメール送信要求をしているようです。

 とりあえず、移行先のサーバでpostfixを稼働させる必要は無いので止めてもらい、メール送信テストを行うと、今度は接続出来ないとアプリ側でエラーになりました。

 どうも、、デフォルト設定がlocalhostで、そちらが優先されているようですね。。

アプリ側が
session = Session.getDefaultInstance(props);
だったので、
session = Session.getInstance(props);
に変えて問題は解消しましたが、どこでデフォルト設定されているのかは不明なままでした。。

こちらが参考になりました。影響は軽微で、ちょっと痛い目にあったという感じです。

カテゴリー: Java