I want to send an email using EJB, but I'm the only thing I get in return for this exception:
java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect, no password specified?
Here's what my EJB looks like:
@Stateless(name = "ejbs/EmailServiceEJB") public class EmailServiceEJB extends Authenticator implements IEmailServiceEJB { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(" xxxxxxx@gmail.com ", "xxxxxxx"); } public void sendAccountActivationLinkToBuyer(String destinationEmail, String name) { // OUR EMAIL SETTINGS String host = "smtp.gmail.com";// Gmail int port = 465; String serviceUsername = " xxxxxxx@gmail.com "; String servicePassword = "xxxxxxx";// Our Gmail password Properties props = new Properties(); props.put("mail.smtp.user", serviceUsername); props.put("mail.smtp.host", host); props.put("mail.smtp.port", port); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.debug", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", port); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); // Destination of the email String to = destinationEmail; String from = " xxxxxxx@gmail.com "; // Creating a javax.Session with the our properties Session session = Session.getInstance(props); try { Message message = new MimeMessage(session); // From: is our service message.setFrom(new InternetAddress(from)); // To: destination given message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject("Comfirm your account"); // Instead of simple text, a .html template should be added here! message.setText("Welcome....... "); Transport transport = session.getTransport("smtp"); transport.connect(host, port, serviceUsername, servicePassword); Transport.send(message, message.getAllRecipients()); transport.close(); } catch (MessagingException e) { throw new RuntimeException(e); } }
}
I do not know why he says that the password is not specified? Does SSLSocketFactory have something with this? Do I need to call the getPasswordAuthenticion () method somewhere, or is the second method call from my managed bean - is that all I need?
source share