Cat
Cat

Reputation: 283

ActionMailer isn't sending my email

I'm trying to use ActionMailer to automatically send a user an email. However, after save of the user, which should trigger the email. I don't see that any message has been sent to my inbox. The save took place without mistakes, but the mail never arrived. What is the problem?

mailers

class OrderNotifier < ActionMailer::Base
  default from: "[email protected]"

  def received(order)
    @order = order
    mail to: order, subject: 'Pragmatic Store Order Confirmation'
  end

end

development.rb

Depot::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true
  config.action_mailer.delivery_method = :sendmail
  config.action_mailer.delivery_method = :test

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      address:
          "smtp.gmail.com",
      port:
          587,
      domain:
          "domain.of.sender.net",
      authentication: "plain",
      user_name:
          "dave",
      password:
          "secret",
      enable_starttls_auto: true
  }


end

controller.rb

def create
    @order = "[email protected]"
    ...
    respond_to do |format|
      if @user.save

        OrderNotifier.received(@order).deliver

        format.html { redirect_to @user}
        format.json { render action: 'show', status: :created, location: @user }
      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      ...
    end

view/order_notifier

Welcome to example.com
Thank you for your recent order from The Pragmatic Store.

Upvotes: 0

Views: 329

Answers (1)

phoet
phoet

Reputation: 18835

you should only have one of those settings:

config.action_mailer.delivery_method = :sendmail
config.action_mailer.delivery_method = :test
config.action_mailer.delivery_method = :smtp

other than that always have the log/development.log file open and see what happens. rails will most likely tell you what it's about to do.

if you want to learn more about debugging, read this http://nofail.de/2013/10/debugging-rails-applications-in-development/

Upvotes: 1

Related Questions