Enviar mail com Interceptor

3 respostas
R

Olá, estou usando um interceptor para quando o usuario cadastrar no meu site ele receber um email de confirmação e eu também para saber que um usuario foi inscrito… S’p que somente eu estou recebendo o email, o usuario não recebe…

Alguém pode me ajudar?

então no meu
app/controllers/contatos_controller.rb

ContatoMailer.contato_confirmation(@contato).deliver

no meu
config/initializers/setup_mail.rb

require 'development_mail_interceptor'
ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => "localhost:3000",
  :user_name            => "usuario",
  :password             => "secret",
  :authentication       => "plain",
  :enable_starttls_auto => true
}

Mail.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

no meu
lib/development_mail_interceptor.rb

class DevelopmentMailInterceptor
    def self.delivering_email(message)
      message.subject = "#{message.to} #{message.subject}"
      message.to = "[email removido]"
  end
end

no meu app/mailers/contato_mailer.rb

class ContatoMailer < ActionMailer::Base
  default :from => "[email removido]"
  def contato_confirmation(contato)
    @contato = contato
    mail(:to => "#{contato.nome} <#{contato.email}>", :subject => "Confirmação de Contato")
  end
end

GEM FILE
gem ‘rails’, '3.0.10’
gem 'activerecord-jdbcmysql-adapter’
gem 'jruby-openssl’
gem 'jruby-rack’
gem 'warbler’
gem 'brazilian-rails’
gem ‘jquery-rails’, '>= 1.0.12’
gem “date_validator”, "~> 0.6.2"
gem “mail”, “2.2.19”

3 Respostas

jpjcjbr

Favor confirmar se é isso que está acontecendo:

  1. Chama o mailer:
  1. O email é montado com o seguinte codigo:
@contato = contato  
mail(:to => "#{contato.nome} <#{contato.email}>", :subject => "Confirmação de Contato")

Note que o :to está configurado com o email do seu contato
3) Antes do email ser enviado, o interceptor roda:

message.subject = "#{message.to} #{message.subject}"  
message.to = "[email removido]"
  1. Quando o interceptor roda ele substitui o :to configurado no passo 2 por [email removido] e o email chega apenas para você

O que você precisa fazer é adicionar um destinatário ao email e não trocar o destinatário existente.

Espero que ajude

abs

R

Obrigado por estar me ajudando, desde já agradeço, mas num entendi muito bem sua resposta, desulpe minha ignorancia, tentei buscar informaçoes no google mas nao encontrei nada ainda… estou fazendo esse exemplo baseado no railscast numero 206…

Como ficaria para eu trocar o destinatario

seria nessa linha do interceptor

message.to = "[email removido]"

ou no ContatoMailer
mail(:to => "#{contato.nome} <#{contato.email}>", :subject => "Confirmação de Contato")

Existe algum outro parametro no message?

O que eu quero fazer na verdade, é ir um email para mim e para o usuario que se cadastrar

A

Olá amigo, de acordo com a ajuda do jpjcjbr eu entendo o seguinte:

message.subject = "#{message.to} #{message.subject}"    
message.to = "[email removido]"  //Aqui você esta alterando o email destino para o do Admin e não mais para o usuário como estava antes..

Com isso apenas o Admin recebe o email… (se a linha 2 não existisse provavelmente o usuário receberia o email)

Mais pelo que entendi vc deseja enviar o mesmo email para você e para o usuário…

Nesse caso não sei se funciona mais tente o seguinte:

message.subject = "#{message.to} #{message.subject}"    
message.to = "#{message.to}; [email removido]"

Até…

Criado 27 de setembro de 2011
Ultima resposta 28 de set. de 2011
Respostas 3
Participantes 3