Ответ 1
Вам нужно добавить две банки в каталог WEB-INF/lib или ваш webapp (или каталог lib на сервере):
- mail.jar - содержит фактическую имплантировку smtp
- activation.jar - требуется mail.jar
Отправить на Email.java
package helper;
//Mail.java - smtp sending starttls (ssl) authentication enabled
//1.Open a new Java class in netbeans (default package of the project) and name it as "Mail.java"
//2.Copy paste the entire code below and save it.
//3.Right click on the file name in the left side panel and click "compile" then click "Run"
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class sendToEmail
{
String d_email = "[email protected]",
d_password = "mysamplepassword",
d_host = "smtp.gmail.com",
d_port = "465",
//m_to = "[email protected]",
m_subject = "trial",
m_text = "Hey, this is the testing email.";
public sendToEmail(String strEmailAddress)
{
Properties props = new Properties();
props.put("mail.smtp.user", d_email);
props.put("mail.smtp.host", d_host);
props.put("mail.smtp.port", d_port);
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
//session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setText(m_text);
msg.setSubject(m_subject);
msg.setFrom(new InternetAddress(d_email));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(strEmailAddress));
Transport.send(msg);
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(d_email, d_password);
}
}
}
часть моего контроллера .java
/* Send to Email will run properly soon */
sendToEmail email = new sendToEmail(strEmailAddress);
Когда я запускаю свое веб-приложение, я получил сообщение об ошибке:
Отчет об исключении типа
сообщение
описание Сервер обнаружил внутренняя ошибка(), которая помешала ему от выполнения этого запроса.
исключение javax.servlet.ServletException: Выполнение сервлета вызвало исключение
первопричина java.lang.NoClassDefFoundError: javax/почта/Authenticator controller.RegisterTenantController.doPost(RegisterTenantController.java:108) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Что мне теперь делать? Может ли кто-нибудь помочь мне добиться успеха этого веб-приложения?
Вам нужно добавить две банки в каталог WEB-INF/lib или ваш webapp (или каталог lib на сервере):
Хотя возможно, что это связано с отсутствием файла jar из вашего пути к классам, это может быть не так.
В этом случае важно сохранить два или три разных исключения:
java.lang.ClassNotFoundException
Это исключение указывает, что класс не найден в пути к классам. Это указывает на то, что мы пытались загрузить определение класса, и класс не существовал в пути к классам.
java.lang.NoClassDefFoundError
Это исключение указывает на то, что JVM просмотрел внутреннюю структуру данных определения класса для определения класса и не нашел его. Это отличается от того, что он не может быть загружен из пути к классам. Обычно это указывает на то, что мы ранее пытались загрузить класс из пути к классам, но по какой-то причине он не удался - теперь мы снова пытаемся, но мы даже не собираемся его загружать, потому что мы не выполнили его загрузку ранее. Более ранним отказом может быть ClassNotFoundException
или ExceptionInInitializerError
(указывающий отказ в статическом блоке инициализации) или любое количество других проблем. Дело в том, что NoClassDefFoundError
не обязательно является проблемой класса.
Я бы посмотрел на источник javax.mail.Authenticator
и посмотрел, что он делает в нем статический инициализатор. (Посмотрите инициализацию статической переменной и статический блок, если она есть.) Если вы не получаете ClassNotFoundException
до NoClassDefFoundError
, вы почти гарантированы, что это статическая проблема с инициализацией.
Я видел подобные ошибки довольно часто, когда файл hosts неправильно определяет адрес localhost, а блок статической инициализации зависит от InetAddress.getLocalHost()
. 127.0.0.1 должен указывать на "localhost" (и, возможно, также localhost.localdomain). Он не должен указывать на фактическое имя хоста машины (хотя по какой-то причине многие старшие установщики RedHat Linux любили устанавливать его неправильно).
Добавьте в свою зависимость от maven следующее:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
Я когда-то работал в этой ситуации, и у меня были зависимости в classpath. Решение заключалось в том, чтобы включить библиотеки javax.mail и javax.activation в папку контейнера (например, tomcat) lib. С maven вы установите для них предоставленную область, и она должна работать. У вас будут общие библиотеки электронной почты в пути к классам для всех проектов.
Полезный источник: http://haveacafe.wordpress.com/2008/09/26/113/
Когда у меня была эта проблема, я включил mail-api.jar
в мой файл maf maven. Это только спецификация API. Исправление состоит в том, чтобы заменить это:
<!-- DO NOT USE - it just the API, not an implementation -->
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
с эталонной реализацией этого api:
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
Я знаю, что в названии пакета есть солнце, но это последняя версия. Я узнал об этом из fooobar.com/questions/73690/...
Даже я столкнулся с подобной ошибкой. Попробуйте ниже 2 шага (первый из которых уже был рекомендован здесь) -
1. Добавьте зависимости к вашему pom.xml
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
jar
в каталог .m2\repository\javax\<folder>\<version>\
.