0

Trying to send a volunteering form through SMTP using Gmail, Sendgrid or anything really however I have Action Mailer all set up and I presume I should really be seeing the email come through when I look at the email. I can see this error below but cannot see any error or receive any email at all. I've tried writing puts in my create action but I do not see those either so this is hopefully an easy fix as I'm missing something or have something not follow the usual Rails convention.

I'm using rails 5.2

What I see in the server:

Started GET "/volunteer?utf8=%E2%9C%93&authenticity_token=AZ%2FAflVf%2BlqRUYm45Jo82wAMpq%2B%2BY%2F93piLbeRXdK5n%2FQIWhuaUL3Oe2%2FSwzR%2FCLvj%2FAKW%2BBgD8dPd8vJYRDBA%3D%3D&volunteer_message%5Bname%5D=test+name&volunteer_message%5Bemail%5D=email%40test.com&volunteer_message%5Bphone_number%5D=88888888&volunteer_message%5Bbody%5D=test+email&commit=Send" for 127.0.0.1 at 2018-10-10 17:29:42 +0100

Processing by PagesController#volunteer as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"AZ/AflVf+lqRUYm45Jo82wAMpq++Y/93piLbeRXdK5n/QIWhuaUL3Oe2/SwzR/CLvj/AKW+BgD8dPd8vJYRDBA==", "volunteer_message"=>{"name"=>"test name", "email"=>"email@test.com", "phone_number"=>"88888888", "body"=>"test email"}, "commit"=>"Send"}

Ok so here's my code and the way it's all layed out.

PagesController.rb contains a page called volunteer and this contains the partial (Called _new.html.erb) which is the form which is in it's own folder called volunteer_messages

views/volunteer_messages/_new.html.erb

 <%= simple_form_for @volunteer_message, url: create_volunteer_message_url do |f| %>
  <%= @volunteer_message.errors.full_messages.join(', ') %>

  <%= f.input :name, placeholder: 'name' %>
  <%= f.input :email, placeholder: 'email' %>
  <%= f.input :phone_number, placeholder: 'phone number' %>
  <%= f.input :body, placeholder: 'body' %>
  <%= f.submit 'Send' %>
<% end %>

routes created

   # is this causing a problem do you think? 
   get '/volunteer' => 'pages#volunteer'

   # volunteer message routes
   get '/volunteer', to: 'volunteer_message#new', as: 'new_volunteer_message'
   post '/volunteer', to: 'volunteer_message#create', as: 'create_volunteer_message'

models/volunteer_message.rb

class VolunteerMessage
    include ActiveModel::Model
    attr_accessor :name, :email, :phone_number, :body
#   validates :name, :email, :phone_number, :body, presence: true
end

mailers/volunteer_message_mailer.rb

class VolunteerMessageMailer < ApplicationMailer

      # Subject can be set in your I18n file at config/locales/en.yml
      # with the following lookup:
      #
      #   en.volunteer_message_mailer.volunteer.subject
      #
      def volunteer(volunteer_message)
            @body = volunteer_message.body
            @subject = "Volunteer Request sent from www.myapp.com"
        mail to: "myemail@example.com", from: volunteer_message.email
      end
    end

volunteer_messages_controller.rb

class VolunteerMessagesController < ApplicationController

    def new
    @volunteer_message = VolunteerMessage.new
  end

    def create
    @volunteer_message = VolunteerMessage.new volunteer_message_params
    if @volunteer_message.valid?
      VolunteerMessageMailer.volunteer(@volunteer_message).deliver_now
      redirect_to new_volunteer_message_url
      flash.now[:notice] = "We have received your volunteer request and will be in touch soon!"
    else
      flash.now[:notice] = "There was an error sending your volunteer request. Please try again."
      render :new
    end
  end

    private

    def volunteer_message_params
    params.require(:volunteer_message).permit(:name, :email, :phone_number, :body)
  end
end

pages_controller.rb

class PagesController < ApplicationController
  def volunteer
    @lead = Lead.new
    @volunteer_message = VolunteerMessage.new
  end
end

development.rb

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

    config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }


    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
            address: 'smtp.gmail.com',
            port: 587,
            domain: 'gmail.com',
            enable_starttls_auto: true,
            user_name: 'me@gmail.com',
            password: 'gmailapppassword',
            authentication: 'plain'
    }

Not sure what else I can add here. I do not think I even need he stmp_settings to see action mailer actually show the template of the email being sent?

Also I'm guessing it is somehting to do with the form and the route because ive added puts messages into the create action on the volunteer_message controller and do not see them in my server log.

I'm not getting any errors when pressing submit. I do notice the params going into the url but that's it. it stays there and when refreshes stays on the same screen.

example:

http://localhost:3000/volunteer?utf8=%E2%9C%93&authenticity_token=AZ%2FAflVf%2BlqRUYm45Jo82wAMpq%2B%2BY%2F93piLbeRXdK5n%2FQIWhuaUL3Oe2%2FSwzR%2FCLvj%2FAKW%2BBgD8dPd8vJYRDBA%3D%3D&volunteer_message%5Bname%5D=test+name&volunteer_message%5Bemail%5D=email%40test.com&volunteer_message%5Bphone_number%5D=88888888&volunteer_message%5Bbody%5D=test+email&commit=Send

Is the clue in the server text in the image that shows params going to the pages controller. I do not really want that. Just want the partial to be there but the action to work of the create action in the volunteer_messages controller.

Any help be much appreciated. Thanks.

Bradley
  • 922
  • 2
  • 8
  • 24

0 Answers0