(Versión en español aquí)
A few SMTP servers still use “POP before SMTP” authentication. Here’s how to add support for that to ActionMailer:
In environment.rb
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.server_settings = {
:port => 25,
:domain => 'example.com',
:address => 'smtp.example.com',
:pop3_auth => {
:server => 'pop.example.com',
:user_name => 'user',
:password => 'password',
:authentication => :login
}
}
The :pop3_auth hash contains the login information for the POP3 server we’re using for authenticating.
if ActionMailer::Base.delivery_method == :smtp and ActionMailer::Base.server_settings.has_key?(:pop3_auth)
class ActionMailer::Base
alias_method :base_perform_delivery_smtp, :perform_delivery_smtp
@@pop3_auth_done = nil
private
def perform_delivery_smtp(mail)
do_pop_auth if !@@pop3_auth_done or (Time.now - server_settings[:pop3_auth][:expires]) >= @@pop3_auth_done
base_perform_delivery_smtp(mail)
end
# Implementacion de la autenticacion
def do_pop_auth
require 'net/pop'
pop = Net::POP3.new(server_settings[:pop3_auth][:server])
pop.start(server_settings[:pop3_auth][:user_name], server_settings[:pop3_auth][:password])
@@pop3_auth_done = Time.now
pop.finish
end
end
end