如何检查邮件地址是不是存在?

Posted

技术标签:

【中文标题】如何检查邮件地址是不是存在?【英文标题】:How to check mail address is exists or not?如何检查邮件地址是否存在? 【发布时间】:2012-11-10 22:17:13 【问题描述】:

我正在使用 com.sun.mail.smtp.SMTPTransport 通过 Java 发送电子邮件。

我已成功发送电子邮件,但如果我将邮件发送到无效的电子邮件地址,SMTPTransport 不会出现任何错误。

有没有办法检查给定的邮件地址是否存在?

我不是指客户端检查邮件地址,我需要检查服务器端

我在许多论坛上发现了很多这样的问题,但我没有得到任何合适的解决方案。

我的代码是 -

String email = "reciever@theirDomain.com";

Properties props = new Properties();
props.put("mail.smtps.host", "mail.myDomain.com");
props.put("mail.smtps.auth", "true");
Session session = Session.getInstance(props, null);

MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("Mail Demo <my_email@myDomain.com>"));
msg.setRecipients(Message.RecipientType.TO, email);
msg.setSubject("Mail Example");
msg.setSentDate(new Date(System.currentTimeMillis()));

String txt = "Message Body";

msg.setText(txt);
SMTPTransport st = (SMTPTransport)session.getTransport("smtps");
st.connect("mail.myDomain.com","my_email@myDomain.com","password");
st.sendMessage(msg, msg.getAllRecipients());

System.out.println("ServerResponse : " + st.getLastServerResponse());

它为有效和无效的 email_address 提供输出:- 250 OK id=1TbWgN-0007oY-8r

请帮我解决问题。 提前致谢。

【问题讨论】:

你试过什么?我在您的代码中看不到任何东西来检查电子邮件地址的有效性/正确性。我会用正则表达式来做。 define valid:你的意思是检查一封电子邮件是否真的对应一个真实的邮箱,或者电子邮件的语法是否有效? @jlordo 感谢您的回复。正则表达式仅检查电子邮件地址的格式是否有效。我想检查邮箱地址是否存在 好吧,你可以试试亚马逊网络服务,如果你的邮件发送到错误的邮件,添加它会抛出异常,这不是最好的选择,但你可以试一试 @HussainAkhtarWahid 谢谢,但我在哪里可以找到亚马逊网络服务? 【参考方案1】:

感谢大家的回复。

我可以通过 MX 记录检查 解决我的问题。

我用这个 Link 来解决问题。希望这对某人也有用。

Hashtable env = new Hashtable();
env.put("java.naming.factory.initial",
             "com.sun.jndi.dns.DnsContextFactory");
DirContext ictx = new InitialDirContext( env );
Attributes attrs = ictx.getAttributes
                       ( hostName, new String[]  "MX" );
Attribute attr = attrs.get( "MX" );
if (( attr == null ) || ( attr.size() == 0 )) 
   attrs = ictx.getAttributes( hostName, new String[]  "A" );
   attr = attrs.get( "A" );
   if( attr == null )
         throw new NamingException
                  ( "No match for name '" + hostName + "'" );

谢谢。

【讨论】:

感谢您的链接!我从您的链接中使用了该示例,但出现错误:找不到类 javax.naming.directory.InitialDirContext。你有同样的问题吗? 我在 Java 6 和 OpenJDK 中尝试过,对我来说效果很好,我没有遇到这样的问题。该类位于 Java 的核心库中。 这适用于所有域吗?这是万无一失的方法吗? 此代码,检查域名的存在例如:gmail.com,hotmail.com ..,而不是电子邮件用户帐户! 就像一个魅力,代码检查域名和地址,如果域存在【参考方案2】:

确认电子邮件地址的唯一方法是向其发送电子邮件,并要求用户按照电子邮件中的(唯一)链接返回您的网站。

【讨论】:

+1,但它无助于识别临时垃圾邮件地址。 @Quentin 感谢您的回复。我想做注册,所以我想用Java。 Deepu - 我认为@Quentin 试图说明的是方法,它与语言(Java、C# 等)无关。例如,当您在 Twitter 中创建一个新帐户时,该网站会发送一封您在注册页面上提到的电子邮件。显然,您打开邮箱并单击链接以验证您是真实用户。昆汀提到的相同方法与语言无关。 @Steven ya 我知道提到昆汀是个好方法,它与语言无关。但它是手动检查意味着接收者必须点击唯一链接,我想要任何通知以编程方式发送邮件成功与否。 @Deepu — 你不会得到一个。这就是为什么答案以唯一的方式开头。一旦电子邮件到达目标服务器,发件人就会失去与它的所有连接。服务器可以将其交付给用户。它可以将其视为垃圾邮件并将其丢弃。它可以将其传递给用户,但结果证明该用户是错误用户,因为您获得了错误的电子邮件地址。等等

以上是关于如何检查邮件地址是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查电子邮件是不是确实存在

我可以使用 .net 检查电子邮件地址是不是存在吗?

如何确定电子邮件地址是不是存在?

检查电子邮件地址是不是存在

检查数据库中是不是已存在电子邮件地址

使用电子邮件地址检查 PayPal 帐户是不是存在?