我在表单中有一个用于输入电子邮件的输入字段。
当用户输入电子邮件并提交表单时,我需要验证电子邮件的域名。
(注意:我不需要验证电子邮件地址。我只需要验证域名)
在Ruby on Rails中检查电子邮件域名是否有效的最佳方法是什么?
我在表单中有一个用于输入电子邮件的输入字段。
当用户输入电子邮件并提交表单时,我需要验证电子邮件的域名。
(注意:我不需要验证电子邮件地址。我只需要验证域名)
在Ruby on Rails中检查电子邮件域名是否有效的最佳方法是什么?
有一个叫做valid_email2的宝石,它具有自定义验证功能。它检查MX记录和A记录。它还允许您在ymls配置文件中简单地添加黑名单或白名单地址。您可以根据要求自定义验证并进行验证。请查看其README获取更多信息。
mx = Resolv::DNS.open { |dns| dns.getresources('domain.com', Resolv::DNS::Resource::IN::MX) }
ok = mx.size > 0
有kamilc/email_verifier可以验证电子邮件地址的真实性,通过模拟发送实际电子邮件到邮件服务器。但这只验证了地址而不仅限于其域名。
如果您只想检查邮件服务器,您需要打开到端口25的域的TCP连接,如@diciu所描述here。
编辑:正如@Doon在评论中所述,这不是一个好主意。您最好向用户发送实际的验证电子邮件。
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
/([a-z0-9]+\.)+[a-z]{2,}/i
)? - Max N.