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

标签 java email

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

相关文章:

java - Spring Boot - 配置文件激活其他配置文件

html - html签名中的对齐

python - 使用 python 和 gmail 在同一个线程中发送多封电子邮件

php - 向检查过 'yes' - php 和 modx 的用户发送电子邮件

java - 如何获取 Android 中当前的系统日期?

java - servlet的filter.destroy()方法的api描述

java - Java 中的泛型

php - 从 PHP 运行时 Python 不发送电子邮件

ios - swift 3 : How to name the PDF when emailing through iOS share sheet?

java - 如何使用 Spring 过滤并抛出自定义异常?