-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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