Skip to content

Instantly share code, notes, and snippets.

@sshkarupa
Forked from mikedamage/email-ping.rb
Created May 23, 2017 08:22
Show Gist options
  • Select an option

  • Save sshkarupa/a48e9ac618c7b6ed076336163cdbba89 to your computer and use it in GitHub Desktop.

Select an option

Save sshkarupa/a48e9ac618c7b6ed076336163cdbba89 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