当前位置: 首页 > 知识库问答 >
问题:

使用Java API查找知道电子邮件地址的SMTP主机和端口

张建华
2023-03-14

我做了一个使用Java API发送电子邮件的简单应用程序,有一个问题:

有没有办法找出SMTP主机知道谁将登录发送电子邮件的电子邮件地址?还有港口?

例如,如果发件人的电子邮件地址为sender@gmail.com,则SMTP主机为SMTP.gmail.com,端口为465。如果发件人的电子邮件地址为sender@yahoo.com,则SMTP主机为SMTP.yahoomail.com,端口为25。

假设我不知道这些,有没有办法找到这些信息使用Java API类?请注意,我是新来Java的:)

先谢谢你,

安德里亚

谢谢你的回答。我试着做了以下几点:

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。

我很确定我错过了什么,但我不知道是什么。请你帮我一下好吗?你能告诉我我做错了什么吗?

非常感谢,

安德里亚

共有2个答案

蓟俊杰
2023-03-14

你的问题有些不太清楚。你要么是试图找出SMTP发送电子邮件到某个地址,所以直接发送到他们的服务器。这是通过上面解释的MX记录完成的。

如果像我所怀疑的那样,您试图为当前用户找出(在from字段中)使用哪一个SMTP服务器向世界发送他的电子邮件。这是另一个故事。不能安全地确定。MX记录为您提供该域的传入电子邮件的地址,而不是传出电子邮件的地址。大多数时候,它会工作,但没有保证。例如,GMail在其MX记录中有:

alt1.gmail-smtp-in.l.google.com internet address = 173.194.70.27
alt2.gmail-smtp-in.l.google.com internet address = 173.194.69.27
alt4.gmail-smtp-in.l.google.com internet address = 173.194.79.27

而smtp.gmail.com(传出)为:

Name:   gmail-smtp-msa.l.google.com
Address: 173.194.67.108

或者公司foobar.com可能有smtp.foobar.com,但只通过他们的VPN接受作为internalmail.foobar.loc的传出邮件。

你可以看到这个猜测游戏在雷鸟设置,他们试图找出服务器自动但要求你确认。

华和悦
2023-03-14

不幸的是,没有标准的方法来为任意电子邮件地址识别正确的传出SMTP服务器,假设您要做的是让用户指定电子邮件地址/密码,然后使用该帐户发送邮件。

这就是电子邮件客户端(例如Thunderbird、Outlook等)通常要求用户手动配置传出的SMTP服务器名称/端口的原因。您可以通过识别几个流行的ISP(Google、Yahoo等)并预先配置适当的值来帮助实现这一过程,但没有自动完成这一过程的通用方法。

 类似资料:
  • 本文向大家介绍Powershell 查找用户的主SMTP地址,包括了Powershell 查找用户的主SMTP地址的使用技巧和注意事项,需要的朋友参考一下 今天同事让我生成一个报表,列出用户的主SMTP地址后缀是@aus.ddb.com的用户。 Get-ADUser可以直接获取相关信息,不过主SMTP是隐藏在ProxyAddress这个属性里面的,如果1个用户有多个邮件地址,大写的SMTP的那个就

  • 我使用的是。 当我尝试并继续到链接的下一页时,我得到以下错误 文件“scrape.py”,第43行,在查找(driver)文件“scrape.py”中,第26行,在查找links.extend中([link.get_attribute('href')for link in driver.find_elements_by_xpath('//h2[@class=“heading”]/a')])文件“/

  • 我有php邮件,我在我的网页上有联系表格。如果有人填写详细信息,如姓名,联系人,电子邮件,消息等,然后点击发送按钮,下面的错误会出现在屏幕上,但我可以接收邮件,但每次发送邮件都会出现此错误消息。 SMTP-

  • 问题内容: 我正在Windows上使用WampServer来测试站点。我有一个注册系统,用户会收到一封确认电子邮件。 是否可以从本地主机发送电子邮件? 问题答案: 如果要直接从本地主机发送电子邮件,则需要安装邮件传输代理(MTA),或者安装SMTP服务。 IIS提供了一个。否则,您可以在Google上找到其他人。 您也可以更改 邮件设置。这将不使用每条说来发送电子邮件,而是用于允许您从PHP脚本发

  • 问题内容: 问题答案: $config = Array( ‘protocol’ => ‘smtp’, ‘smtp_host’ => 'ssl://smtp.googlemail.com’, ‘smtp_port’ => 465, ‘smtp_user’ => ‘xxx’, ‘smtp_pass’ => ‘xxx’, ‘mailtype’ => ‘html’, ‘charset’ => ‘iso-8