繁体   English   中英

解决方法:将电子邮件发送到以下服务器失败SocketException:权限被拒绝:connect

[英]How to solve: Sending the email to the following server failed SocketException: Permission denied: connect

使用Java以编程方式发送邮件时遇到问题。 我从网络团队确认,使用防火墙阻止了通过Java发送邮件 但能够在Windows命令提示符下从telnet获得响应 请在下面找到详细信息。

使用Javax Mail发送邮件的代码:

public static void main(String[] args) throws MessagingException {
        String host = "mailhost.xxx";
        String to = "abc@xyz.edu";
        String from = "cde@xyz.edu";
        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 + ".");

    }

使用Telnet能够在命令提示符下发送邮件: telnet mailhost.xxx 25 am收到如下响应:

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

谷歌搜索后,我还尝试如下在Eclipse中设置JVM参数,仍然没有运气,如下所示

-Djava.net.preferIPv4Stack=true

例外:

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

让我知道解决上述问题的所有可能解决方案。

由于:

  • 源异常指向权限问题,
  • 但是您可以使用telnet从命令行连接

那不是网络防火墙的问题。

您还排除了相关的Java 7错误 因此,问题可能出在您本地的Windows防火墙或您使用的任何防病毒/防火墙上。 它可能会授予telnet权限,但不会授予Java权限。

尝试禁用所有本地防火墙/防病毒软件,然后检查java是否可以成功连接。 如果是这样,请重新启用防火墙,并创建一个例外规则以允许Java应用程序连接到端口25。

针对上述问题发布替代解决方案:当我们使用Exchange帐户时,我们能够使用EWS(Exchange Web服务)API以编程方式发送邮件。 EWS入门指南链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM