使用JAVA API查找电子邮件地址并确定SMTP主机和端口

6
我用Java API制作了一个简单的发送电子邮件的应用程序,有以下问题: 如果我知道登录者的电子邮件地址,有没有办法找到SMTP主机并确定端口号? 例如,如果发件人的电子邮件地址是sender@gmail.com,则SMTP主机为smtp.gmail.com,端口为465。 如果发件人的电子邮件地址是sender@yahoo.com,则SMTP主机为smtp.yahoomail.com,端口为25。
假设我不知道这些信息,有没有使用Java API类查找此信息的方法?请注意,我对Java很陌生 :)
提前致谢,
Andreea
感谢您的答案。 我尝试了以下操作:
public static String getMXRecordsForEmailAddress(String eMailAddress) { 
          
    String returnValue = null; 
    
    try { 
        String hostName = getHostNameFromEmailAddress(eMailAddress); 
        Record[] records = new Lookup(hostName, Type.MX).run();

        if (records == null) { 
            throw new RuntimeException("No MX records found for domain " + hostName + ".");
        }
         
        // return first entry (not the best solution) 
        if (records.length > 0) { 
            MXRecord mx = (MXRecord) records[0]; 
            returnValue = mx.getTarget().toString(); 
        } 
    } catch (TextParseException e) { 
        throw new RuntimeException(e); 
    } 
         
    System.out.println("return value = "+returnValue);
    return returnValue; 
} 

但是,无论hostName的值是什么(例如gmail.com、yahoo.com),Record[] records = new Lookup(hostName, Type.MX).run();总是返回null。

我相信我错过了一些东西,但是我不知道是什么。你能帮我吗?你能告诉我我的错误在哪里吗?

非常感谢,

Andreea


从技术上讲,您可以查找mx记录,但这可能不会很简单:http://www.exclamationsoft.com/exclamationsoft/netmailbot/help/website/HowToFindTheSMTPMailServerForAnEmailAddress.html。 - mellamokb
MX记录并不能完全解决问题。MX记录告诉你,如果你要发送一条消息某个地址,应该联系哪个入站SMTP服务器;但这并不告诉你当你从该地址发送消息时应该使用哪个出站服务器/端口。例如,在gmail的情况下,MX类似于gmail-smtp-in.l.google.com,但出站SMTP服务器是smtp.gmail.com - David Gelhar
3个回答

1

很遗憾,对于任意电子邮件地址,没有标准的方法来识别正确的出站SMTP服务器,假设您正在尝试让用户指定电子邮件地址/密码,然后使用该帐户发送邮件。

这就是为什么电子邮件客户端(例如Thunderbird,Outlook等)通常要求用户手动配置出站SMTP服务器名称/端口的原因。您可以通过识别一些流行的ISP(Google,Yahoo等)并预先配置正确的值来协助该过程,但没有通用的自动方式来实现。


是的,有一种标准方法可以识别电子邮件地址的正确SMTP服务器。它被称为MX。 - TimBigDev

0

0

看起来你想让用户只输入电子邮件和密码来连接。如果是这样,我们也遇到过同样的问题,我们找到的最好方法是获取域名并执行以下操作:

  1. 如果它像Gmail、Yahoo或Outlook之类的公共网站,尝试使用它们特定的配置。

  2. 如果它是私有域或类似的东西,请循环遍历传出服务器smtp.domain.com和mail.domain.com,使用端口587、465和25。您可能需要检查TLS和身份验证。

这个过程有点长,但如果您有几个公共电子邮件和十几个私人电子邮件,您应该能够测试大多数情况。


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