0

gmail を使用しているかどうかを判断するために、ユーザーの電子メールに基づいて MX レコードを検索しています。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

非Googleメールサーバーが次のようなものを送り返す場所:

mx2.emailsrvr.com
mx1.emailsrvr.com
nil

mx レコードの 1 つに 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?メソッドが返すtruefalse、明示的に返す必要がないため、メソッド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 に答える