1

MailForm gem を使用して単純な電子メール フォームを設定しようとしていますが、機能せず、メッセージも表示されません。

これが私のコントローラーメソッドです

   class ContactsController < ApplicationController
 def new
    @contact = Contact.new
  end

  def create
    @contact = Contact.new(params[:contact])
    @contact.request = request
    if @contact.deliver
      flash.now[:notice] = "Thanks! I'll contact you soon."
    else
      flash.now[:error] = 'Cannot send message.'
      render :new
    end
  end

  private

  def contact_params
    params.require(:contact).permit(:from_email, :from_name, :subject, :message)
  end  
end

次にビュー(実際にはprofiles/showページではなくページにありcontact/newます。それは問題ですか?

 <%= form_for @contact do |f| %>
            <div class="form-group">
              <%= f.label "Your Email" %>
              <%= f.text_field :from_email, class: "form-control" %>
            </div>
            <div class="form-group">
              <%= f.label "Subject" %>
              <%= f.text_field :subject, class: "form-control" %>
            </div>
            <div class="form-group">
              <%= f.label "Message" %>
              <%= f.text_area :message, class: "form-control" %>
            </div>
            <div class="form-group">
              <%= f.hidden_field :to_email, value: @user.email %>
              <%= f.submit "Contact", class: 'btn btn-primary form-control' %>
            </div>
          <% end %> 

また、設定の問題である可能性もあると思います。これが私が使用している構成ですgmail

  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',
    user_name:            '<email>',
    password:             '<password>',
    authentication:       'plain',
    enable_starttls_auto: true  }

で、モデルはこちら

class Contact < MailForm::Base
  # belongs_to :user
  attribute :to_email
  attribute :name,      :validate => true
  attribute :from_email,     :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
  attribute :subject
  attribute :message

  def headers
    {
      subject: subject,
      to: to_email, 
      from: <email>
    }
  end


end

スタックオーバーフローで見つけることができるほぼすべての答えを試しましたが、何も機能していません。ここで何が間違っていますか?

4

1 に答える 1