检查电子邮件域是否有效

时间:2016-09-27 10:09:45

标签: ruby-on-rails validation ruby-on-rails-4

我的表单中有一个email_id的输入字段 当用户输入电子邮件ID并提交表单时,我需要验证电子邮件的域名。

(注意:我无需验证电子邮件地址。我只需要验证域名)

在Ruby on Rails中检查Email-Domain是否有效的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

如果存在DNS域记录,则可以检查MX服务器。

mx = Resolv::DNS.open { |dns| dns.getresources('domain.com',  Resolv::DNS::Resource::IN::MX) }
ok = mx.size > 0

答案 1 :(得分:1)

通过假装向邮件服务器发送实际的电子邮件,kamilc/email_verifier可以验证电子邮件地址的真实性。但这确实会验证地址而不仅仅是域名。

如果您只想检查邮件服务器,则需要打开端口25上域的tcp连接,如@diciu所述here

编辑:正如@Doon在评论中所述,这不是一个好主意。您最好向用户发送实际的验证邮件。

答案 2 :(得分:1)

require ‘resolv’ #”gem install resolv-ipv6favor“

email = “foo@example.com” #test with valid email
split_email = email.split(“@”) #split string with “@”
domain = split_email[1].to_s #get domain name
if email =~ (/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i)
#checking domain name
Resolv::DNS.open do |dns|
@staus = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
end
else
errors_add(:email, ‘domain name can not be found.’)
end

答案 3 :(得分:1)

有一个具有自定义验证的 gem valid_email2。它检查 MX 记录和 A 记录。它还允许您简单地将列入黑名单或列入白名单的地址添加为 ymls 中的配置。您可以根据需要自定义验证和验证。查看它的 README 了解更多信息。