2016-09-15 73 views
0

我想测试两种方法通过SMTP发送邮件:SMTP重复发送消息 - 需要验证

第1种方法:

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) { 

     } 

} 

第一种方法效果很好,但用第二种方法我总是得到错误:

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

调试运行时,调用时 tr.sendMessage(message, new Address[]{recipient});

我失去了我的代码的东西在第二种方法中,有什么建议例外SendFailedException被抛出?在SMPT服务器的

的属性是:

mail.smtp.auth = true

mail.smtp.starttls.enable = true

mail.smtp.host = smtp.gmail.com

mail.smtp.port = 587

+0

为什么所有的评论都被删除!!!!! ,无论如何,解决方案是声明Transport tr = session.getTransport(“smtp”);而不是像第一种方法那样改变消息的结构。 – Selma

回答

0

您使用的是“SMTPS”协议,但您为“SMTP”协议的属性。更改您的代码以使用“smtp”协议。