当前位置: 首页 > 知识库问答 >
问题:

如何解决:发送电子邮件到以下服务器失败Socket异常:权限拒绝:连接

奚飞星
2023-03-14

我在使用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我收到的回复如下:

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

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

共有2个答案

能业
2023-03-14

为我的上述问题发布了另一个解决方案:在使用Exchange帐户时,我们能够使用EWS(Exchange Web Services)API以编程方式发送邮件。EWS入门指南链接

申屠无尘
2023-03-14

自:

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

这不是网络防火墙问题。

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

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

 类似资料:
  • 我在selenium执行后实现了自动邮件发送器,它适用于非代理环境,但不适用于企业代理环境。有人知道有什么问题吗?需要改变什么? 代码:

  • 问题内容: 我的配置: Windows 7机器 Java 7 Jenkins 1.511在本地帐户上作为服务运行 我的jenkins.xml文件 我的hudson.tasks.Mailer.xml文件 注意:“ example.com”代替了我的真实域/电子邮件/ smtp服务器。 当我指示詹金斯发送测试电子邮件时,出现以下错误: 我对此错误的理解是,Windows 7中存在一个错误,该错误由Ja

  • 我正在尝试通过smtp发送邮件,但它显示错误消息。我正在使用主机号578.after执行程序,它显示无法将套接字转换为TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPath

  • 问题内容: 有没有一种方法可以为PHP 配置WAMP服务器以启用该功能? 问题答案: 从本地主机配置工作的电子邮件客户端是一件很麻烦的事情,我花了数小时无奈地尝试它。我确信更有经验的人可能会提供帮助,或者他们也许会同意我的看法。

  • 问题内容: 我在寻找有关如何 从localhost WAMP发送电子邮件的 适当信息。以及如何获得从特定的授权电子邮件地址发送电子邮件的授权以发送任何其他电子邮件地址。 如何配置这整个步骤向我解释了细节,我已经在这里访问了一些Stack Overflow的答案以及博客文章,但是所有内容都很混乱且过时,因此可能无法正常工作。所以我需要Stack Overflow用户帮助。谢谢。 问题答案: 从配置工

  • 我试图发送电子邮件使用gmail smtp使用javax.mail.下面是我的代码 代码工作正常当我在本地服务器上运行它时,但当我尝试在Elastic beanstek上运行它时(我的服务器在AWS EBS上运行),身份验证失败异常即将到来注意:我已打开从Google A/c设置访问不太安全的应用程序,但我仍然收到此错误 javax.mail.身份验证失败异常:534-5.7.14请通过您的网络浏