# 在特定域中查找组内的所有电子邮件地址用户

**URL:** <https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672>\
**Category:** Development\
**Created:** [2019年六月29日 21:21 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672 "2019-06-29T21:21:23Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![csmu](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/csmu/32/124581_2.png) [@csmu](https://meta.discourse.org/u/csmu)\
**Post date:** [2019年六月29日 21:21 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/1 "2019-06-29T21:21:23Z")

</div>

我们的共享 Mailgun 服务器在 Microsoft 控制的域名上被阻止。我想向该组中拥有 Microsoft 邮箱地址的用户发送消息。

我正在寻找一些 Ruby 代码，用于查找组内邮箱地址属于特定域名的所有用户。

---

<div class="post-metadata">

**Author:** ![omarfilip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/omarfilip/32/208019_2.png) [@omarfilip](https://meta.discourse.org/u/omarfilip)\
**Post date:** [2019年六月30日 00:39 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/2 "2019-06-30T00:39:54Z")

</div>

> [@csmu](#):
>
> Mailgun 服务器在微软控制的域名上被屏蔽

这种情况我们偶尔也会遇到，但通常随着微软处理违规发件人，问题会自行解决。有几次我请求 Mailgun 支持团队将我们迁移到一个更安静的 IP 地址，他们确实这样做了。

---

<div class="post-metadata">

**Author:** ![csmu](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/csmu/32/124581_2.png) [@csmu](https://meta.discourse.org/u/csmu)\
**Post date:** [2019年六月30日 00:45 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/3 "2019-06-30T00:45:48Z")

</div>

> [@omarfilip](#):
>
> 我曾几次请求 Mailgun 支持团队将我们迁移到更安静的 IP 地址，他们确实这样做了。

您使用的是免费套餐还是付费计划？

---

<div class="post-metadata">

**Author:** ![omarfilip](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/omarfilip/32/208019_2.png) [@omarfilip](https://meta.discourse.org/u/omarfilip)\
**Post date:** [2019年六月30日 00:48 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/4 "2019-06-30T00:48:09Z")

</div>

付费“概念”计划，每月约 30,000 封邮件。

另一种可能的方法：创建一个新群组，自动添加特定域名的成员，然后向该群组发送消息：

 ![33%20PM](https://global.discourse-cdn.com/meta/original/3X/1/e/1ee6aa5bd4536e6b1267f2ae706fb458b489783a.png)

`/g/custom/new`

---

<div class="post-metadata">

**Author:** ![csmu](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/csmu/32/124581_2.png) [@csmu](https://meta.discourse.org/u/csmu)\
**Post date:** [2019年六月30日 01:22 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/5 "2019-06-30T01:22:55Z")

</div>

这是我编写的代码，用于提取属于特定域且属于特定组的用户的电子邮件地址。

```ruby
def extract_users_email_addresses_by_named_domains_and_group_names(domain_names=[], group_names=[], output_path=nil, verbose=false)
  
  # TODO 将 SQL 调用改为使用参数
  
  results = []
  user_ids = []
  group_ids = []
  users_email_addresses = []
  
  group_names_sql = 'select * from groups where '
  group_names_where = ''
  
  user_emails_sql = 'select user_id from user_emails where '
  user_emails_where = ''
  
  if domain_names.length > 0 and group_names.length > 0 then    
    domain_names.each do |domain_name|
      if user_emails_where.length == 0 then
        user_emails_where = sprintf("email like '%%%s%%'", domain_name)
      else
        user_emails_where = sprintf("%s or email like '%%%s%%'", user_emails_where, domain_name)
      end
    end
    user_emails_sql = sprintf("%s %s", user_emails_sql, user_emails_where)
    if verbose then
      puts "UserEmail.find_by_sql(\"#{user_emails_sql}\")"
    end
    user_emails = UserEmail.find_by_sql(user_emails_sql)
    user_emails.each do |user_email|
      user_ids.push(user_email.user_id)
    end
    
    group_names.each do |group_name|
      if group_names_where.length == 0 then
        group_names_where = sprintf("name like '%%%s%%'", group_name)
      else
        group_names_where = sprintf("%s or name like '%%%s%%'", group_names_where, group_name)
      end
    end
    group_names_sql = sprintf("%s %s", group_names_sql, group_names_where)
    if verbose then
      puts "Group.find_by_sql(\"#{group_names_sql}\")"
    end
    groups = Group.find_by_sql(group_names_sql)
    groups.each do |group|
      group_ids.push(group.id)
    end
    
    group_users = GroupUser.where(group_id: group_ids.to_set, user_id: user_ids.to_set)
    user_ids = []
    group_users.each do |group_user|
      user_ids.push(group_user.user_id)
    end
    
    users = User.where(id: user_ids.to_set)
    users.each do |user|
      users_email_addresses.push(sprintf("%s", user.email))
    end
    
    if output_path then
      file = File.open(output_path, "w")
      first = true
      users_email_addresses.each do |users_email_address|
        if first then
          first = false
          file.write(users_email_address)
        else
          file.write(sprintf(",%s", users_email_address))
        end
      end
      file.write("\n")
      file.close()
    end
  end
  
  return { group_ids: group_ids.to_set, user_ids: user_ids.to_set, users_email_addresses: users_email_addresses }
end

domain_names = ['outlook.com', 'hotmail', 'live.com']
group_names = ['irish-club-members']
output_path = 'irish-club-microsoft-email-list.txt'
verbose = false

extract_users_email_addresses_by_named_domains_and_group_names(domain_names: domain_names, group_names: group_names, output_path: output_path, verbose: verbose)

```

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2019年六月30日 12:48 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/6 "2019-06-30T12:48:54Z")

</div>

我曾让他们将账户迁移到新的IP地址，使用的是每月10K的免费套餐，有时不到一小时就完成了。您确实应该提交一个工单。

---

<div class="post-metadata">

**Author:** ![csmu](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/csmu/32/124581_2.png) [@csmu](https://meta.discourse.org/u/csmu)\
**Post date:** [2019年七月1日 04:15 UTC](https://meta.discourse.org/t/finding-all-users-in-a-group-within-email-addresses-in-certain-domains/121672/7 "2019-07-01T04:15:30Z")

</div>

> [@pfaffman](#):
>
> 你确实应该开一个工单。

看起来他们已经修复了……而且还没开工单：slight\_smile:  
🆒
