我的表单中有一个email_id的输入字段 当用户输入电子邮件ID并提交表单时,我需要验证电子邮件的域名。
(注意:我无需验证电子邮件地址。我只需要验证域名)
在Ruby on Rails中检查Email-Domain是否有效的最佳方法是什么?
答案 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 了解更多信息。