早上好!我在这里进行了很多搜索以找到解决方案,但我发现的所有内容都不起作用。 我有类(class)邮件:
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);
}
}
主类:
package main;
import model.mail.Mail;
public class Main {
public static void main(String[] args) {
try {
Mail email = new Mail( "user@domain.com", "Teste", "teste..", null );
email.setHostName( "smtp.mail.yahoo.com" );
email.setSmtpPort( 587 );
email.setAuthentication( "user@yahoo.com.br", "mypassword" );
email.setFrom( "user@yahoo.com.br", "My Name" );
email.send();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
此代码曾经有效,但现在不再有效。当我运行它时,我得到这个异常:
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)
this.setSSL(true);
您的防火墙可能阻止端口 465。尝试删除该代码段并使用真实端口 587,看看它是否有效。如果是这样,您必须联系网络管理员或进行网络配置。
关于java - 使用 Java Commons Mail 发送电子邮件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24266297/