Skip to content

Instantly share code, notes, and snippets.

@mrks111
Forked from mikedamage/email-ping.rb
Created December 2, 2023 13:10
Show Gist options
  • Save mrks111/b36ffb1dcc607719cae5cf4c54604ac9 to your computer and use it in GitHub Desktop.
Save mrks111/b36ffb1dcc607719cae5cf4c54604ac9 to your computer and use it in GitHub Desktop.
Ping an email address to see if it exists. This script resolves MX records to find the SMTP server responsible for delivering mail to the address, connects to it, and starts to send a message to the address. It disconnects before the message is sent.
#!/usr/bin/env ruby
#
# = Email Ping
#
# Check to see if an email address exists by looking up MX records and connecting
# to the address's home SMTP server. It then starts to send a message to the address
# but quits before the message is actually sent.
require 'resolv'
require 'net/smtp'
address = ARGV[0].chomp
domain = address.split('@').last
dns = Resolv::DNS.new
puts "Resolving MX records for #{domain}..."
mx_records = dns.getresources domain, Resolv::DNS::Resource::IN::MX
mx_server = mx_records.first.exchange.to_s
puts "Connecting to #{mx_server}..."
Net::SMTP.start mx_server, 25 do |smtp|
smtp.helo "loldomain.com"
smtp.mailfrom "[email protected]"
puts "Pinging #{address}..."
puts "-" * 50
begin
smtp.rcptto address
puts "Address probably exists."
rescue Net::SMTPFatalError => err
puts "Address probably doesn't exist."
end
end
# vim: set ft=ruby ts=2 sw=2 :
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment