2016-09-15 2 views
0

Я пытаюсь проверить два метода для отправки сообщений по протоколу SMTP:SMTP повторно отправки сообщений - Требуется проверка подлинности

первый метод:

public void sendEmail(String emailRecip, String subject, String texte, List<String> listAttachedFile){ 


     Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
        @Override 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(username, password); 
        } 
       }); 

     try { 
      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress(username)); 
      String address = emailRecip; 
      InternetAddress[] iAdressArray = InternetAddress.parse(address); 
      message.setRecipients(Message.RecipientType.TO, iAdressArray); 
      message.setSubject(subject); 
      MimeBodyPart mbp1 = new MimeBodyPart(); 
      mbp1.setText(texte); 
      Multipart mp = new MimeMultipart(); 
      mp.addBodyPart(mbp1); 
      for (String attachedFile : listAttachedFile) { 
       if (attachedFile != null) { 
        addAttachment(mp, attachedFile); 
       } 
      } 
      message.setContent(mp); 
      Transport.send(message); 

     } catch (MessagingException e) { 
      isMsgSent = "0"; 
     } catch (IOException ex) { 
      Logger.getLogger(SMTPRepositoryImpl.class.getName()).log(Level.SEVERE, null, ex); 
     } 

} 

второй метод: раз посылая сообщение:

public void sendMailrepeatdly(String emailRecip, String subject, String texte, List<String> listAttachedFile){ 
Session session = Session.getInstance(props,null); 

     /*Session session = Session.getInstance(props, 
     new javax.mail.Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(username, password); 
     } 
     });*/ 

     try { 
      MimeMessage message = new MimeMessage(session); 
      String address = emailRecip; 
      InternetAddress[] iAdressArray = InternetAddress.parse(address); 

      message.setFrom(new InternetAddress(username)); 
      message.setRecipients(Message.RecipientType.TO, iAdressArray); 
      message.setSubject(subject); 
      BodyPart messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setText(texte); 
      Multipart multipart = new MimeMultipart(); 
      multipart.addBodyPart(messageBodyPart); 
      messageBodyPart = new MimeBodyPart(); 

      for (String attachedFile : listAttachedFile) { 
       if (attachedFile != null) { 
        addAttachment(multipart, attachedFile); 
       } 
      } 

      multipart.addBodyPart(messageBodyPart); 
      message.setContent(multipart); 
      message.saveChanges(); 
      try { 
       long startTime = System.currentTimeMillis(); 
       Transport tr = session.getTransport("smtps"); 
       tr.connect(host, username, password); 
       // tr.sendMessage(message,message.getAllRecipients()); 
       for (Address recipient : message.getAllRecipients()) { 
        tr.sendMessage(message, new Address[]{recipient}); 
       } 
       tr.close(); 

      } catch (SendFailedException sfe) { 
       System.out.println(sfe); 
      } catch (IOException ex) { 
       Logger.getLogger(SMTPRepositoryImpl.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } catch (MessagingException e) { 

     } 

} 

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

com.sun.mail.smtp.SMTPSendFailedException: 530-5.5.1 Authentication Required.

когда отладки, то SendFailedException исключение при вызове tr.sendMessage(message, new Address[]{recipient});

я упускаю что-то в моем коде во втором способе, любые предложения?

свойства сервера SMPT являются:

mail.smtp.auth = true

mail.smtp.starttls.enable = true

mail.smtp.host = smtp.gmail.com

mail.smtp.port = 587

+0

Почему все комментарии удалены !!!!! , в любом случае, решение заключается в объявлении транспорта tr = session.getTransport («smtp»); а не smtps, а также изменить конструкцию сообщения, как в первом методе. – Selma

ответ

0

Вы используете протокол «SMTPs», но вы устанавливаете свойства для протокола «Smtp». Измените свой код, чтобы использовать протокол «smtp».

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