2016-02-07 13 views
0

Я пытаюсь отправить электронное письмо по Windows 8.1 с помощью java 1.8 с помощью javax.mail API, но я все равно получаю сообщение об ошибке.Не удалось отправить почту с Javax.mail

Вот метод, который я написал:

public void sendAlertMail(String from, String to, String header, String msgBody){ 
     Properties props = new Properties(); 
     props.put("mail.transport.protocol", "smtp"); 
     props.put("mail.smtp.host", smptHost); 
     props.put("mail.smtp.port", smptPort); 
     props.put("mail.smtp.starttls","true"); 
     Session mailSession; 
     if (authenticate) { 
      props.put("mail.smtp.auth", "true"); 

      Authenticator auth = new SMTPAuthenticator(); 
      mailSession = Session.getInstance(props, auth); 
     } 
     else{ 
      mailSession = Session.getInstance(props); 
     } 
     // uncomment for debugging infos to stdout 
     // mailSession.setDebug(true); 
     Transport transport = null; 
     try { 
      transport = mailSession.getTransport(); 
     } catch (NoSuchProviderException e) { 
      e.printStackTrace(); 
     } 

     MimeMessage message = new MimeMessage(mailSession); 
     try { 
      message.addHeaderLine(header); 
      message.setContent(msgBody, "text/plain"); 
      message.setFrom(new InternetAddress(from)); 
      message.addRecipient(Message.RecipientType.TO, 
        new InternetAddress(to)); 
     } catch (MessagingException e) { 
     } 
     try { 
      transport.connect(); 
      transport.sendMessage(message, 
        message.getRecipients(Message.RecipientType.TO)); 
      transport.close(); 
     } catch (MessagingException e) { 
      e.printStackTrace(); 
     } 
    } 

И ошибка я получаю это:

com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 587; timeout -1; 
    nested exception is: 
    java.net.SocketException: Permission denied: connect 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2100) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:699) 
    at javax.mail.Service.connect(Service.java:388) 
    at javax.mail.Service.connect(Service.java:246) 
    at javax.mail.Service.connect(Service.java:195) 
    at tapperSolution.mail.MailSender.sendAlertMail(MailSender.java:64) 
    at tapperSolution.mail.MailSender.sendAlertMail(MailSender.java:74) 
    at tapperSolution.mail.MailSender.main(MailSender.java:88) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: java.net.SocketException: Permission denied: connect\at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:589) 
at java.net.Socket.connect(Socket.java:538) 
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:331) 
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2066) 
... 12 more 

Я выключил свой брандмауэр и антивирус, и я попытался установить параметр VM в моей код с помощью:

System.setProperty("java.net.preferIPv4Stack", "true"); 

пытался также установить его в команде запуска с:

-Djava.net.preferIPv4stack = истинный

Я был в состоянии отправить почту с помощью Python, но я хочу сделать это с помощью Java.

Пытался захватить трафик с помощью Wireshark, но даже с TCP-сервером даже не было рукопожатия TCP.

Любые другие идеи?

Благодаря

+0

mail.smtp.starttls.enable = true? Вы установили этот флаг? –

+0

попробуйте подключиться к электронной почте с помощью telnet вне приложения и посмотреть, что произойдет. Если вы можете подключиться, это ваши разрешения для приложений, которые нуждаются в поиске, а не проблемах с брандмауэром. – DaveRlz

+0

У вас работает автономное приложение, апплет, приложение jnlp или что-то еще? –

ответ

0

Похоже, ваш сервер SMTP может блокировать подключение, возможно, из-за проблемы аутентификации. Чтобы проверить это, попробуйте manual SMTP session с той же машины и посмотрите, какой результат.

+0

Кажется, что доступ запрещен локально, поскольку на сервере нет трафика. Я смог отправить электронное письмо с того же компьютера на тот же сервер, используя Python. – AndreyF

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