невозможно отправить электронное письмо в приложении, установленном на Glassfish - PullRequest
0 голосов
/ 26 января 2012

Я провел буквально два дня с этим, погуглил везде и до сих пор не могу решить, давайте посмотрим, если кто-то поймет, что я делаю неправильно:

Я определил сессию 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 не является эта проблема). Любая идея будет высоко оценена, так как я не могу думать ни о чем другом.

1 Ответ

1 голос
/ 26 января 2012

JavaMail (все классы javax.mail. *) Включены в GlassFish (при условии, что вы используете полную версию платформы Java EE, а не только версию Web Profile); вам не нужно включать mail.jar в ваше приложение или устанавливать его вручную. Я не могу объяснить, почему javax.mail.Message не найдено, когда вы делаете это. ClassCastException указывает, что у вас есть две версии mail.jar, доступные для приложения.

...