إيجاد جميع المستخدمين في مجموعة ضمن عناوين البريد الإلكتروني في نطاقات معينة

يتم حظر خادم Mailgun المشترك الخاص بنا على النطاقات التي تسيطر عليها Microsoft. أريد إرسال رسالة إلى الأشخاص في المجموعة الذين لديهم عناوين بريد إلكتروني من Microsoft.

أبحث عن كود Ruby للعثور على جميع المستخدمين ضمن مجموعة معينة ولديهم عناوين بريد إلكتروني ضمن نطاقات محددة.

يحدث هذا لنا أحيانًا، لكنه عادةً ما يحل من تلقاء نفسه بينما تتعامل الشركة مع المرسل(ين) المخالف(ين). وقد طلبت من دعم Mailgun في بعض المرات نقلنا إلى عنوان IP أقل ازدحامًا، وقد فعلوا ذلك.

هل أنت على الخطة المجانية أم الخطة المدفوعة؟

خطة “المفهوم” المدفوعة. حوالي 30 ألف بريد إلكتروني شهريًا.

طريقة أخرى ممكنة: إنشاء مجموعة جديدة وإضافة أعضاء نطاق معين تلقائيًا، ثم مراسلة تلك المجموعة:

/g/custom/new

هذا ما كتبته لاستخراج عناوين البريد الإلكتروني للمستخدمين الذين يمتلكون عناوين بريد إلكتروني ضمن مجموعة من النطاقات، وينتمي المستخدمون إلى مجموعة من المجموعات.

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)

لقد نجحنا في نقل الحسابات إلى عناوين IP جديدة مع خطط مجانية تصل إلى 10 آلاف شهريًا، وأحيانًا في أقل من ساعة. يجب عليك بالتأكيد فتح تذكرة دعم.

يبدو أنهم قد أصلحوا المشكلة بالفعل… دون الحاجة لفتح تذكرة دعم :slight_smile:
:cool: