使用Java Commons邮件发送电子邮件时出错

使用Java Commons邮件发送电子邮件时出错,java,email,Java,Email,早上好!我在这里搜索了很多,想找到一个解决方案,但我发现的一切都不起作用。 我有班级邮件: package model.mail; import java.nio.charset.Charset; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; public

早上好!我在这里搜索了很多,想找到一个解决方案,但我发现的一切都不起作用。 我有班级邮件:

package model.mail;

import java.nio.charset.Charset;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

public class Mail extends MultiPartEmail {

    // Default constructor
    public Mail() throws EmailException {

        this( null, null, null, null);

    }

    // My Constructor
    @SuppressWarnings("deprecation")
    public Mail( String receiver, String subject, String message, EmailAttachment[] attachments ) throws EmailException {

        this.addTo( receiver, "" );

        this.setSubject( new String( subject.getBytes( Charset.forName("utf-8") ), Charset.forName("utf-8") ) );

        this.setMsg( new String( message.getBytes( Charset.forName("utf-8") ), Charset.forName("utf-8") ) );

        if( attachments != null ) {
            for ( int i = 0; i < attachments.length; i++ )
                this.attach( attachments[i] );
        }

        this.setSSL(true);

    }

}
这段代码过去是有效的,但现在不再有效了。当我运行它时,会出现以下异常:

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.mail.yahoo.com:465
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
    at org.apache.commons.mail.Email.send(Email.java:1437)
    at main.Main.main(Main.java:29)
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.mail.yahoo.com, 465; timeout 60000;
  nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
    at javax.mail.Service.connect(Service.java:367)
    at javax.mail.Service.connect(Service.java:226)
    at javax.mail.Service.connect(Service.java:175)
    at javax.mail.Transport.send0(Transport.java:253)
    at javax.mail.Transport.send(Transport.java:124)
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
    ... 2 more
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:295)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:208)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
    ... 9 more
请原谅我犯了一些错误,我是新来的


更新:我终于找到了错误!邮件服务器可能已更改,现在需要TLS身份验证。我将身份验证更改为TLS,它成功了

您正在设置端口587,但在方法中启用了SSL(465)


您的防火墙可能正在阻止端口465。尝试删除这段代码,并将其用于实际端口587,看看它是否有效。如果是这样,您必须与网络管理员联系,或者努力进行网络配置。

您可以使用普通电子邮件客户端和类似参数通过同一服务器发送邮件吗?不,我不能。我还试图更改服务器,但没有任何效果。@LucasMP听起来像是网络/邮件服务器问题。我担心这可能与堆栈溢出无关。我同意这看起来像是网络/服务器问题。为了测试和调试Java代码,您需要一个服务器和参数的组合,使您能够使用经过良好测试的邮件客户端发送电子邮件。@Duncan但可以是什么?用于工作的代码与我的网络配置相同。我检查了防火墙,防病毒…它不工作,因为服务器需要SSL身份验证。设置post的行应该使用setSslSmtpPort(587),因为SSL将被启用。此外,setSSL已弃用,因此将来您将需要使用setSSLOnConnect。
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.mail.yahoo.com:465
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1410)
    at org.apache.commons.mail.Email.send(Email.java:1437)
    at main.Main.main(Main.java:29)
Caused by: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.mail.yahoo.com, 465; timeout 60000;
  nested exception is:
    java.net.ConnectException: Connection timed out: connect
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
    at javax.mail.Service.connect(Service.java:367)
    at javax.mail.Service.connect(Service.java:226)
    at javax.mail.Service.connect(Service.java:175)
    at javax.mail.Transport.send0(Transport.java:253)
    at javax.mail.Transport.send(Transport.java:124)
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1400)
    ... 2 more
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:295)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:208)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
    ... 9 more
this.setSSL(true);