permission net enviar desde correo autenticar archivo adjunto java smtp javamail socketexception

java - net - Cómo resolver: El envío del correo electrónico al siguiente servidor falló SocketException: Permiso denegado: conectar



enviar email java sin autenticar (2)

Publicar una solución alternativa para mi problema anterior: como usábamos cuentas de Exchange pudimos enviar los correos programáticamente usando la API EWS (Exchange Web Services). Guía de inicio de EWS Enlace

Estoy enfrentando problemas al enviar correos electrónicos mediante programación mediante Java. Confirmé por el equipo de red que el envío de correos a través de Java se bloquea mediante el uso de firewall. pero puedo obtener la respuesta de telnet en mi símbolo del sistema de Windows . Por favor, encuentre los detalles a continuación.

Código utilizado para enviar correos usando Javax Mail:

public static void main(String[] args) throws MessagingException { String host = "mailhost.xxx"; String to = "[email protected]"; String from = "[email protected]"; String subject = "test"; String messageText = "body test"; Properties props = System.getProperties(); props.put("mail.host", host); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.port", "25"); // If using authentication, otherwise comment out props.put("mail.smtp.auth", "true"); // Gmail requires TLS, your server may not props.put("mail.smtp.starttls.enable", "true"); // Session mailSession = Session.getDefaultInstance(props, null); Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password"); } }); Message msg = new MimeMessage(mailSession); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = { new InternetAddress(to) }; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject(subject); msg.setSentDate(new Date()); msg.setText(messageText); Transport transport = mailSession.getTransport("smtp"); // connect with authentication // transport.connect(host,"myUsername" , "myPassword"); // connect without authentication transport.connect(); transport.sendMessage(msg, address); transport.close(); System.out.println("Mail was sent to " + to); System.out.println(" from " + from); System.out.println(" using host " + host + "."); }

Utilizando Telnet puedo enviar correos electrónicos en el símbolo del sistema: telnet mailhost.xxx a las 25 am obteniendo la respuesta como:

220 mailhost Microsoft ESMTP MAIL Service ready at Tue, 29 Mar 201 6 23:34:36 -0700

Después de buscar en Google también intenté establecer el argumento de JVM en Eclipse como se muestra a continuación, sin suerte todavía obteniendo la excepción que se muestra a continuación.

-Djava.net.preferIPv4Stack=true

Excepción:

Exception in thread "main" org.apache.commons.mail.EmailException: Sending the email to the following server failed : mailhost.xxx:25 at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) at org.apache.commons.mail.Email.send(Email.java:1267) at edu.xxx.pageobject.appcenter.util.ReportGenerator.main(ReportGenerator.java:328) Caused by: javax.mail.MessagingException: Could not connect to SMTP host: mailhost xxx, port: 25; nested exception is: java.net.SocketException: Permission denied: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370) at javax.mail.Service.connect(Service.java:297) at javax.mail.Service.connect(Service.java:156) at javax.mail.Service.connect(Service.java:105) at javax.mail.Transport.send0(Transport.java:168) at javax.mail.Transport.send(Transport.java:98) at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232) ... 2 more Caused by: java.net.SocketException: Permission denied: connect at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232) at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250) ... 9 more

Déjame saber cualquier posible solución para resolver el problema anterior.


Ya que :

  • la excepción de origen apunta a un problema de permisos,
  • pero puedes conectarte desde la línea de comando usando telnet

eso no es un problema de firewall de red.

También descartó el error relacionado con Java 7 . Entonces, el problema probablemente provenga de su Firewall local de Windows o del antivirus / firewall que esté utilizando. Puede otorgar permisos a telnet, pero no a Java.

Intenta desactivar todo tu firewall / antivirus local y comprueba si java puede conectarse correctamente. Si es así, vuelva a habilitar su firewall y cree una regla de excepción para permitir las conexiones al puerto 25 para su aplicación Java.