Role-Based Address Detection
EmailDomainChecker supports detection and optional rejection of role-based email addresses (e.g., noreply@, admin@, support@). This is useful for distinguishing personal email addresses from automated system addresses, which may not be suitable for certain use cases like user registration or personal communications.
Overview
Role-based email addresses are commonly used for automated systems and may not be suitable for certain use cases (e.g., user registration, personal communications). This feature helps identify and filter such addresses.
Configuration
Basic Usage
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
end
# Role addresses will be rejected
EmailDomainChecker.valid?("noreply@example.com") # => false
EmailDomainChecker.valid?("admin@example.com") # => false
# Personal addresses will pass (if they pass other validations)
EmailDomainChecker.valid?("user@example.com") # => true/false (depends on DNS)
Default Role Addresses
By default, the following role addresses are detected:
noreply,no-replyadmin,administratorsupport,helpinfo,contactsales,marketingpostmaster,abuse
Custom Role Addresses
You can customize the list of role addresses to detect:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
config.role_addresses = ["noreply", "admin", "support", "custom-role"]
end
# Custom role addresses will be rejected
EmailDomainChecker.valid?("custom-role@example.com") # => false
EmailDomainChecker.valid?("noreply@example.com") # => false
# Other addresses will pass
EmailDomainChecker.valid?("user@example.com") # => true/false (depends on DNS)
Detection Behavior
Case-Insensitive
Role address detection is case-insensitive:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
end
# All of these will be rejected
EmailDomainChecker.valid?("noreply@example.com") # => false
EmailDomainChecker.valid?("NoReply@example.com") # => false
EmailDomainChecker.valid?("NOREPLY@example.com") # => false
Plus Sign Support
Role addresses with plus signs are also detected:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
end
# These will be rejected
EmailDomainChecker.valid?("noreply@example.com") # => false
EmailDomainChecker.valid?("noreply+tag@example.com") # => false
EmailDomainChecker.valid?("noreply+123@example.com") # => false
Dot Separator Support
Role addresses with dot separators are also detected:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
end
# These will be rejected
EmailDomainChecker.valid?("noreply@example.com") # => false
EmailDomainChecker.valid?("noreply.tag@example.com") # => false
EmailDomainChecker.valid?("noreply.team@example.com") # => false
Default Behavior
By default, reject_role_addresses is set to false, meaning role addresses are not rejected:
# Default behavior (reject_role_addresses = false)
EmailDomainChecker.valid?("noreply@example.com") # => true/false (depends on DNS, not rejected as role address)
Use Cases
User Registration
Prevent users from registering with role-based addresses:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
end
# In your registration form
email = params[:email]
unless EmailDomainChecker.valid?(email)
flash[:error] = "Personal email addresses only. Role-based addresses are not allowed."
return
end
Personal Communications
Ensure only personal email addresses are used for communications:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
config.role_addresses = ["noreply", "no-reply", "donotreply"]
end
# Check before sending personal messages
if EmailDomainChecker.valid?(recipient_email)
send_personal_message(recipient_email)
else
logger.warn("Skipping role-based address: #{recipient_email}")
end
Custom Business Rules
Combine with other validation rules:
EmailDomainChecker.configure do |config|
config.reject_role_addresses = true
config.role_addresses = ["noreply", "admin", "support"]
config.blacklist_domains = ["10minutemail.com"]
end
# Both role address and blacklist checks are performed
EmailDomainChecker.valid?("noreply@example.com") # => false (role address)
EmailDomainChecker.valid?("user@10minutemail.com") # => false (blacklist)
EmailDomainChecker.valid?("user@example.com") # => true/false (depends on DNS)
Integration with ActiveModel
When using ActiveModel integration, role address detection is automatically applied:
class User < ActiveRecord::Base
validates :email, domain_check: { reject_role_addresses: true }
end
# This will fail validation
user = User.new(email: "noreply@example.com")
user.valid? # => false
user.errors[:email] # => ["is invalid"]
Notes
- Role address detection is performed before format and domain validation
- Detection is case-insensitive
- Supports plus sign (
+) and dot (.) separators after the role address - Default role addresses can be customized via
role_addressesconfiguration - When
reject_role_addressesisfalse(default), role addresses are not rejected