Я провел буквально два дня с этим, погуглил везде и до сих пор не могу решить, давайте посмотрим, если кто-то поймет, что я делаю неправильно:
Я определил сессию javaMail в Glassfish со всеми параметрами, необходимыми для связи с почтовым сервером (хост, пользователь, пароль, порт и т. Д.). Я развертываю приложение, которое ищет этот сеанс с помощью jndi и пытается отправить электронное письмо. Код:
InitialContext ctx = new InitialContext();
Session session = (Session) ctx.lookup("mail/javaMailSession");
Message msg = new MimeMessage(session);
msg.setSubject("test");
msg.setRecipient(RecipientType.TO, new InternetAddress("zzz@yyy.com", "zzz"));
msg.setFrom(new InternetAddress("jjjj@kkkk.com", "hhh"));
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("this is a test email");
Transport.send(msg);
Теперь, если я разверну свое приложение без зависимости mail.jar, при загрузке класса, содержащего этот код, я получу
ClassNotFoundException: javax.mail.Message, meaning mail.jar is not in the classpath.
Если я помещу mail.jar в папку domain / lib или просто добавлю запись пути к классу в манифест моего приложения, включая местоположение mail.jar, у меня больше не будет ClassNotFoundException
, но когда поиск будет выполнен, и я получу Сессия, я получаю самый странный
ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session.
Это будет означать, что у меня есть две версии mail.jar, но, как я уже сказал, если я удаляю его из / lib или не добавляю запись classpath в манифест, он даже не находит ее.
Я нахожусь на Ubuntu 11.10 , использую Glassfish 3.1.1 и java-6-sun-1.6.0.26 (так что Activation.jar не является эта проблема). Любая идея будет высоко оценена, так как я не могу думать ни о чем другом.