Je suis un débutant complet dans Rails et j'essaie d'envoyer un courrier électronique après que quelqu'un se soit inscrit à l'aide de actionmailer.
Mes journaux indiquent que l'e-mail envoie, mais que Gmail ne l'obtient jamais
config/initializers/setup_mail.rb
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "asciicasts.com",
:user_name => "asciicasts",
:password => "secret",
:authentication => "plain",
:enable_starttls_auto => true
}
mailers/user_mailer.rb
class UserMailer < ActionMailer::Base
default :from => "[email protected]"
def registration_confirmation(user)
mail(:to => user.email, :subject => "Registered")
end
end
controllers/users_controller.rb
...
def create
@user = User.new(params[:user])
if @user.save
UserMailer.registration_confirmation(@user).deliver
sign_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
...
Merci!
Assurez-vous que cette option est définie dans votre config/environments/development.rb
:
config.action_mailer.delivery_method = :smtp
De plus, dans ActionMailer::Base.smtp_settings
, vous devez spécifier un compte gmail valide. Copier-coller (asciicasts) ne va pas le couper ici.
Voir cette question pour référence: Envoi de courrier avec Rails 3 dans un environnement de développement
Au lieu de 'smtp', vous pouvez utiliser 'sendmail'
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = { :address => "smtp.gmail.com",
:port => "587", :domain => "gmail.com", :user_name => "[email protected]",
:password => "yyy", :authentication => "plain", :enable_starttls_auto => true }
J'ai rencontré ce même problème pour un nouveau courrier que j'avais configuré. Je n'arrivais pas à comprendre pourquoi ce nouveau mailer ne pouvait pas envoyer d'e-mails, ni même accéder à la méthode dans le mailer quand je l'ai parcouru.
En fin de compte, si vous mettez le code deliver_now
ou deliver*
dans l'expéditeur, il n'envoie pas le courrier électronique.
def email_message()
message = mail(to: User.first, subject: 'test', body: "body text for mail")
message.deliver_now
end
#Different class; in my case a service
def caller
message = MyMailer.email_message
message.deliver_now
end
def email_message()
mail(to: User.first, subject: 'test', body: "body text for mail")
end
Cela a résolu le problème pour moi, j'espère que cela le résoudra pour quelqu'un d'autre.