![]() | You are viewing Log in Create a LiveJournal Account Learn more | Explore LJ: Life Entertainment Music Culture News & Politics Technology |
Искал долго, и не нашел. Код для проверки существования email адреса на руби.
Если вдруг кому надо будет, чтоб не мучался как я.
#
# given: from_addr, to_addr
#
require 'net/smtp'
require 'resolv'
next unless to_addr =~ /^(.*)@(.*)$/
username = $1
domain = $2
# check domain
mxs = []
begin
timeout(10) do
Resolv::DNS.open{|dns| mxs = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)}
end
rescue Timeout::Error
end
if mxs.empty?
newsletter.update_attribute(:status, Newsletter::STATUS_INVALID)
raise InvalidEmail
end
# check email recipient existence
found = false
mxs.each do |mx|
smtp = nil
begin
smtp = Net::SMTP.new(mx.exchange.to_s)
class << smtp
public :get_response
end
if from_addr =~ /^.*<(.*@.*)>\s*$/
from_addr = $1
end
if to_addr =~ /^.*<(.*@.*)>\s*$/
to_addr = $1
end
smtp.start
smtp.get_response("MAIL FROM: <#{from_addr}>")
resp = smtp.get_response("RCPT TO: <#{to_addr}>")
found = true if resp =~ /^(\d+)\s/ && $1 == "250"
smtp.get_response("RSET")
break
rescue
ensure
if smtp
smtp.finish rescue nil
end
end
end
raise InvalidEmail unless found
# EMail is Valid!