我根据用户的电子邮件查找MX记录,以确定他们是否使用Gmail。 mx服务器记录如下:
ASPMX.L.GOOGLE.com
ALT1.ASPMX.L.GOOGLE.com
ALT2.ASPMX.L.GOOGLE.com
ASPMX2.GOOGLEMAIL.com
ASPMX3.GOOGLEMAIL.com
alt4.gmail-smtp-in.l.google.com
alt3.gmail-smtp-in.l.google.com
alt2.gmail-smtp-in.l.google.com
gmail-smtp-in.l.google.com
alt1.gmail-smtp-in.l.google.com
非谷歌邮件服务器发回的内容如下:
mx2.emailsrvr.com
mx1.emailsrvr.com
nil
确定其中一个mx记录是否包含google mx记录的好方法是什么。我一直在努力:
if mx.any? {|server| server.exchange.to_s.include? "google"} then
return true
end
这不起作用,因为它需要完全匹配。任何优雅的想法?感谢
答案 0 :(得分:3)
假设mx
是一个数组:
mx.any? { |server| server.exchange.to_s.downcase.include? "google" }
应该有效。顺便说一句,因为any?
方法返回true
或false
,您不需要显式返回true
,只需返回any?
方法的值
示例:
[
"ASPMX.L.GOOGLE.com",
"ALT1.ASPMX.L.GOOGLE.com",
"ALT2.ASPMX.L.GOOGLE.com",
"ASPMX2.GOOGLEMAIL.com",
"ASPMX3.GOOGLEMAIL.com",
"alt4.gmail-smtp-in.l.google.com",
"alt3.gmail-smtp-in.l.google.com",
"alt2.gmail-smtp-in.l.google.com",
"gmail-smtp-in.l.google.com",
"alt1.gmail-smtp-in.l.google.com"
]
array.any? { |server| server.include? "google" }
# => true
array.any? { |server| server.downcase.include? "google" }
# => true
array.all? { |server| server.include? "google" }
# => false
array.all? { |server| server.downcase.include? "google" }
# => true