Alle Benutzer in einer Gruppe innerhalb von E-Mail-Adressen bestimmter Domains finden

Unser gemeinsamer Mailgun-Server wird bei von Microsoft verwalteten Domains blockiert. Ich möchte eine Nachricht an die Personen in der Gruppe mit Microsoft-E-Mail-Adressen senden.

Ich suche nach Ruby-Code, um alle Benutzer innerhalb einer Gruppe mit E-Mail-Adressen in bestimmten Domains zu finden.

Das passiert uns manchmal, aber es klärt sich in der Regel von selbst, sobald sie mit den betreffenden Absendern verfahren. Ein paar Mal habe ich den Mailgun-Support gebeten, uns auf eine ruhigere IP-Adresse zu verlegen, und das haben sie auch getan.

Bist du im kostenlosen Tarif oder auf einem bezahlten Plan?

Bezahlter „Concept“-Plan. Ca. 30.000 E-Mails pro Monat.

Eine weitere Möglichkeit: Erstellen Sie eine neue Gruppe und fügen Sie automatisch Mitglieder einer bestimmten Domain hinzu, um dann diese Gruppe zu kontaktieren:

/g/custom/new

Das ist, was ich geschrieben habe, um E-Mail-Adressen von Benutzern mit E-Mail-Adressen innerhalb einer Reihe von Domains und deren Zugehörigkeit zu einer Reihe von Gruppen zu extrahieren.

def extract_users_email_addresses_by_named_domains_and_group_names(domain_names=[], group_names=[], output_path=nil, verbose=false)
  
  # TODO: SQL-Aufrufe so ändern, dass Parameter verwendet werden
  
  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)

Ich habe bereits dafür gesorgt, dass Konten mit den kostenlosen 10.000/monatlichen Plänen auf neue IP-Adressen umgezogen werden, manchmal in weniger als einer Stunde. Du solltest auf jeden Fall ein Ticket eröffnen.

Sieht so aus, als hätten sie es schon behoben … ohne ein Ticket zu erstellen :slight_smile:
:cool: