Trovare tutti gli utenti di un gruppo negli indirizzi email di determinati domini

Il nostro server Mailgun condiviso viene bloccato sui domini controllati da Microsoft. Voglio inviare un messaggio alle persone di quel gruppo che hanno indirizzi email Microsoft.

Sto cercando del codice Ruby per trovare tutti gli utenti di un gruppo con indirizzi email in determinati domini.

Ci capita a volte, ma di solito si risolve da solo mentre gestiscono il mittente/i responsabile/i. Qualche volta ho chiesto al supporto di Mailgun di spostarci su un IP meno affollato e l’hanno fatto.

Sei nel piano gratuito o su un piano a pagamento?

Piano “Concept” a pagamento. Circa 30.000 email al mese.

Un’altra possibilità: crea un nuovo gruppo e aggiungi automaticamente i membri di un determinato dominio, quindi invia un messaggio a quel gruppo:

/g/custom/new

Questo è quanto ho scritto per estrarre gli indirizzi email degli utenti che possiedono un indirizzo email in un insieme di domini e che appartengono a un insieme di gruppi.

def extract_users_email_addresses_by_named_domains_and_group_names(domain_names=[],group_names=[],output_path=nil,verbose=false)
  
  # TODO: modificare le chiamate SQL per utilizzare i parametri
  
  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)

Li ho visti spostare gli account su nuovi indirizzi IP con i piani gratuiti da 10k/mese, a volte in meno di un’ora. Dovresti assolutamente aprire un ticket.

Sembra che l’abbiano già risolto… senza nemmeno aprire un ticket :slight_smile:
:cool: