使用Java验证SMTP服务器凭据,而不实际发送邮件

8
我应该使用transport.connect()来验证smtp服务器凭据吗?
Session session = Session.getInstance(properties,authenticator);

 Transport tr=session.getTransport("smtp");

 tr.connect();

检查SMTP服务器凭据的方法是否正确?

2个回答

21

这个问题:'Verify mail server connection programmatically in ColdFusion',其中包含一个Java解决方案作为被接受的答案的一部分:

int port = 587;
String host = "smtp.gmail.com";
String user = "username@gmail.com";
String pwd = "email password";

try {
    Properties props = new Properties();
    // required for gmail 
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.auth", "true");
    // or use getDefaultInstance instance if desired...
    Session session = Session.getInstance(props, null);
    Transport transport = session.getTransport("smtp");
    transport.connect(host, port, user, pwd);
    transport.close();
    System.out.println("success");
 } 
 catch(AuthenticationFailedException e) {
       System.out.println("AuthenticationFailedException - for authentication failures");
       e.printStackTrace();
 }
 catch(MessagingException e) {
       System.out.println("for other failures");
       e.printStackTrace();
 }

我已经尝试过这个方法,但对于除了 Gmail 之外的地址都无效 - 总是打印成功。你有什么想法吗?我正在使用 smtp.1and1.com,即使凭据不正确也会打印成功。 - ntgCleaner
我尝试了你的解决方案,但即使使用正确的数据(我现在正在使用这些电子邮件数据设置发送电子邮件),我仍然收到以下错误信息: 535 验证数据不正确你有什么想法吗? - Francisco Souza

5
public boolean confirmSMTP(String host, String port, String username, String password, String auth, String enctype) {
    boolean result = false;
    try {
        Properties props = new Properties();
        if (auth.equals(true)) {
            props.setProperty("mail.smtp.auth", "true"); 
        } else { 
            props.setProperty("mail.smtp.auth", "false"); 
        }
        if (enctype.endsWith("TLS")) {
            props.setProperty("mail.smtp.starttls.enable", "true");
        } else if (enctype.endsWith("SSL")) {
            props.setProperty("mail.smtp.startssl.enable", "true");
        }
        Session session = Session.getInstance(props, null);
        Transport transport = session.getTransport("smtp");
        int portint = Integer.parseInt(port);
        transport.connect(host, portint, username, password);
        transport.close();
        result = true;

    } catch(AuthenticationFailedException e) {
        Logging.addMsg(e.toString(), "SMTP: Authentication Failed", false, true);

    } catch(MessagingException e) {
        Logging.addMsg(e.toString(), "SMTP: Messaging Exception Occurred", false, true);
    } catch (Exception e) {
        Logging.addMsg(e.toString(), "SMTP: Unknown Exception", false, true);
    }

    return result;
}

1
巴克,我尝试了这个,但就像上面的答案一样,我收到了一个成功的消息,而事实上不应该是这样。我所做的有什么问题吗? - ntgCleaner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接