0

我正在根据用户的电子邮件查找 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

这不起作用,因为它需要完全匹配。有什么优雅的想法吗?谢谢

4

1 回答 1

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
于 2013-08-10T00:03:51.067 回答