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.