Trouver tous les utilisateurs d'un groupe dans les adresses e-mail de certains domaines

Notre serveur Mailgun partagé est bloqué sur les domaines contrôlés par Microsoft. Je souhaite envoyer un message aux personnes du groupe disposant d’adresses e-mail Microsoft.

Je recherche un code Ruby pour trouver tous les utilisateurs d’un groupe dont les adresses e-mail appartiennent à certains domaines.

Cela nous arrive parfois, mais cela se résout généralement tout seul alors qu’ils traitent l’expéditeur (ou les expéditeurs) en question. À quelques reprises, j’ai demandé au support de Mailgun de nous déplacer vers une adresse IP moins sollicitée, et ils l’ont fait.

Êtes-vous sur l’offre gratuite ou un plan payant ?

Forfait « Concept » payant. ~30 000 e-mails par mois.

Une autre possibilité : créer un nouveau groupe et ajouter automatiquement les membres d’un domaine particulier, puis envoyer un message à ce groupe :

/g/custom/new

Ceci est ce que j’ai écrit pour extraire les adresses e-mail des utilisateurs ayant des adresses e-mail dans un ensemble de domaines et appartenant à un ensemble de groupes.

def extract_users_email_addresses_by_named_domains_and_group_names(domain_names=[],group_names=[],output_path=nil,verbose=false)
  
  # TODO remplacer les appels SQL par des requêtes paramétrées
  
  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)

J’ai déjà fait migrer des comptes vers de nouvelles adresses IP avec les offres gratuites à 10 000 par mois, parfois en moins d’une heure. Vous devriez absolument ouvrir un ticket.

On dirait qu’ils l’ont déjà corrigé… sans avoir à ouvrir de ticket :slight_smile:
:cool: