先週中ごろから突然発生する自作アプリからのメール送信失敗。

javax.mail.SendFailedException: Send failure (javax.mail.AuthenticationFailedException: 504 Invalid Username or Password
)
	at javax.mail.Transport.send(Transport.java:163)
	at javax.mail.Transport.send(Transport.java:48)
(略)
Caused by: javax.mail.AuthenticationFailedException: 504 Invalid Username or Password
	at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
	at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:685)
	at javax.mail.Service.connect(Service.java:254)
	at javax.mail.Service.connect(Service.java:85)
	at javax.mail.Service.connect(Service.java:70)
	at javax.mail.Transport.send(Transport.java:94)
	... 5 more

見ての通り、認証失敗。ユーザ名とパスワードが違うと言っている。
が、メール送信処理クラスをJUnitから動かすと普通に送れるのである。当初は自分のPC上のEclipseVPS上のVMの違いかなと思っていたが、VPSにantとJUnit入れてCUIにてメール送信処理クラスを動かすと成功する。
実は別のクラスを見ているのではなかろうか?とも思ったが、ログを入れて確かめたが同じクラスの同じメソッドが呼ばれている。
ユーザ名とパスワードを文字列定数としてそのクラス中にハードコーディングで入れても、JUnitから呼ぶと成功、本番APから呼ぶと失敗という謎の挙動。あとは怪しいのはmail.jarを別のものを見ているとか?
最近、jarの整理をしているからその辺が怪しい。Cならマルチスレッドで領域壊してる可能性も微レ存だがさすがにJavaでExecutorフレームワーク使ってるしそれはなかろう…。そもそもfinalだし再現度100%だし。まぁもう少しトレースを増やして明日また見よう。