gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:03 24 4
gpt4 key购买 nike

早上好!我在这里进行了很多搜索以找到解决方案,但我发现的所有内容都不起作用。我有类(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com