2013-11-29 2 views
0

Я не знаком с этой функцией для отправки почты в java. Я получаю сообщение об ошибке при отправке электронной почты для подтверждения пользователя после регистрации.JavaMail javax.mail.AuthenticationFailedException

Ниже код в TextMail:

public class TextMail extends HttpServlet { 

static String sender_email = "[email protected]"; 
static String password = "aaaa1111"; 
static String host = "smtp.gmail.com"; 
static String port = "465"; 

private static class MailAuthenticator extends javax.mail.Authenticator { 

    @Override 
    public PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(sender_email, password); 
    } 
} 

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 

    try { 
     System.out.println("inside textmail"); 

     System.out.println(request.getParameter("to")); 
     System.out.println(request.getParameter("text")); 
     System.out.println(request.getParameter("subject")); 

     String to = request.getParameter("to"); 
     String text = request.getParameter("text"); 
     String subject = request.getParameter("subject"); 

     Properties props = new Properties(); 
     props.put("mail.smtp.user", sender_email); 
     props.put("mail.smtp.host", host); 
     props.put("mail.smtp.port", port); 
     props.put("mail.smtp.starttls.enable", "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"); 

     Authenticator auth = new MailAuthenticator(); 
     Session session = Session.getInstance(props, auth); 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(sender_email)); 
     message.setSubject(subject); 
     message.setText(text); 

     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 

     Transport.send(message); 
     System.out.println("execute textmail"); 
    } catch (Exception mex) { 
     throw new ServletException(mex); 
    } 
} 

параметры для приведенного выше кода передается от другого servelet:

response.sendRedirect("TextMail?to="+ul.getEmail()+"&text=path?UID="+u.getIduser()+"&subject=Comfirmation"); 

и эти параметры успешно перешедших к TextMail

+0

Это означает, что ваш неверный пароль. – SLaks

ответ

3

Вы смешиваете конфигурации TLS и SSL, и это не верно. Вам нужно выбрать тот, который нужно использовать. В частности, если вы хотите использовать SSL, вы должны использовать что-то вроде этого:

Properties props = new Properties(); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.socketFactory.port", "465"); 
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.port", "465"); 

или если вы хотите использовать TLS вы можете использовать что-то вроде этого:

Properties props = new Properties(); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable", "true"); 
props.put("mail.smtp.host", "smtp.gmail.com"); 
props.put("mail.smtp.port", "587"); 

Обратите внимание также, что вы можете Используйте свои классические учетные данные gmail для отправки электронной почты через клиента, но для этой цели вы должны установить для нее специальный пароль (см. https://support.google.com/accounts/answer/185833)

Для получения дополнительных сведений о настройке общих почтовых клиентов для использования gmail, отметьте https://support.google.com/mail/answer/13287

После вышеуказанных соображений, вы можете увидеть два рабочих примеров Java в http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example

Смежные вопросы