2015-07-21 5 views
4

У меня возникла следующая ошибка при попытке отправить электронную почту через Java Mail API? Что означает эта ошибка?Ошибка при отправке электронной почты через Java Mail API?

javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketTimeoutException: Read timed out 
javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketTimeoutException: Read timed out 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2210) 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1950) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642) 
     at javax.mail.Service.connect(Service.java:317) 
     at javax.mail.Service.connect(Service.java:176) 
     at javax.mail.Service.connect(Service.java:125) 
     at javax.mail.Transport.send0(Transport.java:194) 
     at javax.mail.Transport.send(Transport.java:124) 

Вот мой код, я установить все параметры (от, до, предметов и приспособлений)

public static void send(MailUtil mailUtil) throws MessagingException { 
      MimeMessage message = new MimeMessage(session); 
      if (props.getProperty(IConstants.DL_MAIL_CONFIGURATION.MAIL_SENDER) != null) {    
       message.setFrom(new InternetAddress(props.getProperty(IConstants.DL_MAIL_CONFIGURATION.MAIL_SENDER))); 
      } else { 
       message.setFrom(new InternetAddress(mailUtil.getFrom())); 
      } 
      message.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse(mailUtil.getTo())); 
      if (mailUtil.getBcc() != null && mailUtil.getBcc().trim().length() > 0) { 
       message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(mailUtil.getBcc())); 
      } else { 
       message.setRecipients(Message.RecipientType.BCC,InternetAddress.parse("")); 
      } 

      message.setSubject(mailUtil.getSubject(), "UTF-8"); 

      // Check for files list and attach them. 
      if (mailUtil.attachmentFiles != null && mailUtil.attachmentFiles.size() > 0) { 
       Multipart multipart = new MimeMultipart(); 

       // Set content. 
       BodyPart messageBodyPart =new MimeBodyPart(); 
       messageBodyPart.setContent(mailUtil.getContent(), "text/plain; charset=utf-8"); 
       multipart.addBodyPart(messageBodyPart); 

       // Attach files. 
       for (File file : mailUtil.attachmentFiles) { 
        messageBodyPart = new MimeBodyPart(); 
        DataSource source = new FileDataSource(file); 
        messageBodyPart.setDataHandler(new DataHandler(source)); 
        messageBodyPart.setFileName(file.getName()); 
        multipart.addBodyPart(messageBodyPart); 
       } 

       message.setContent(multipart); 
      } else { 
       //message.setContent("<h1>Hello world</h1>", "text/html"); 
       message.setContent(mailUtil.getContent(), "text/html; charset=UTF-8"); 
      }   
      Transport.send(message); 
    } 

Я просто думаю, что есть какие-либо проблемы с моей paramters?

Belows моя конфигурация

mail.smtp.port=465 
mail.smtp.starttls.enable=true 
mail.smtp.auth=true 
mail.smtp.socketFactory.port=465 
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
mail.smtp.timeout=25000 

mail.smtp.host=smtp.gmail.com 
mail.username = [email protected] 
mail.password = mypassword 
mail.sender = [email protected] 
mail.receiver = [email protected] 
mail.subject = mysubject 

Я использую почтовый сервер Google! Я не думаю, что там есть проблема!

Belows является инициации сеанса

final String userName = props.getProperty(IConstants.DL_MAIL_CONFIGURATION.MAIL_USERNAME); 
final String passWord = props.getProperty(IConstants.DL_MAIL_CONFIGURATION.MAIL_PASSWORD); 

session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(userName, 
           passWord); 
        } 
      }); 
+2

Просьба поделиться вместе с кодами, чтобы он не помог вам –

+1

Вам нужна информация о проверке MessageingException с URL-адресом http://stackoverflow.com/questions/5659325/getting-javax-mail-messagingexception-and-java-net- socketexception –

+0

Там есть время, поэтому, возможно, ваш почтовый сервер недоступен или настройка свойств неверна. – Typo

ответ

5

Я считаю, что это абсолютно относится к конфигурации сервера. Когда я меняю конфигурацию порта с 465 до 587, он решает мою проблему! В любом случае, спасибо вам за помощь!

+0

Правильно, порт 465 ожидает, что вы запустите сеанс SSL, а затем запустите SMTP поверх него, по сравнению с портом 587, где сеанс начинается в SMTP с открытым текстом, а затем starttls используется для согласования зашифрованного сеанса TLS. Итак, первые две строки вашей конфигурации находятся в конфликте. – mc0e

0

Я не уверен, почему вы используете «почтовый» объект для настройки свойств соединения, вместо того, чтобы попробовать это, он должен работать, я проверил себя:

private Properties props; 
props = System.getProperties(); 
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"); 

session = Session.getInstance(props, 
    new javax.mail.Authenticator() { 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication(username, password); 
     } 
     }); 
try { 
     message.setFrom(new InternetAddress("YOUR EMAIL ADDRESS HERE")); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress("RECEIVER EMAIL ADDRESS HERE")); 
     message.setSubject("SUBJECT"); 

     message.setText("THE EMAIL TEXT"); 
     Transport.send(message); 
    } catch (MessagingException e) {e.printStackTrace();} 
} 
Смежные вопросы