2017-01-08 2 views
0

J'essaye de créer une page de contact us dans mon application 5 rails en utilisant le mailform gem. J'ai suivi cette vidéo sur YouTube expliquant le processus:Rails 5 mailform n'envoie pas de courrier

Cependant, je n'arrive pas à envoyer les emails en mode développement ou production, et je ne sais pas trop pourquoi. Toute aide serait très appréciée!

Voici ce que j'ai:

Welcome.rb:

class Welcome < MailForm::Base 
    attribute :name, :validate => true 
    attribute :email, :validate => /\A([\w+\-].?)[email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i 
    attribute :message, :validate => true 
    attribute :nickname, :captcha => true 

    def headers 
     { 
      :subject => "Contact from About Site", 
      :to => "[email protected]", 
      :from => %("#{name}" <#{email}>) 
     } 
    end 
end 

welcome_controller:

class WelcomeController < ApplicationController 
    def index 
    @welcome = Welcome.new 
    end 

    def create 
    @welcome = Welcome.new(params[:welcome]) 
    @welcome.request = request 
    if @welcome.deliver 
     flash.now[:error] = nil 
    else 
     flash.now[:error] = 'Cannot send message.' 
     render :index 
    end 
    end 
end 

La forme elle-même: (index.html.erb)

<section id="contact"> 
    <div class="container"> 
     <%= form_for welcome_index_path do |f| %> 
      <%= f.label :name %> 
      <%= f.text_field :name, required: true %> 
      <br> 
      <%= f.label :email %> 
      <%= f.email_field :email, required: true %> 
      <br> 
      <%= f.label :message %> 
      <%= f.text_area :message, as: :text %> 
      <div class="hidden"> 
       <%= f.label :nickname %> 
       <%= f.text_field :nickname, hint: "Leave this field blank" %> 
      </div> 
      <br> 
      <%= f.submit 'Send Message', class: "btn btn-primary btn-large" %> 
     <% end %> 
    </div> 
</section> 

Et maintenant mes fichiers de configuration:

production.rb, en utilisant heroku avec SendGrid:

# email 
config.action_mailer.default_url_options = {host: 'https://my_heroku_app.herokuapp.com'} 
    config.action_mailer.delivery_method = :smtp 
    ActionMailer::Base.smtp_settings = { 
    :address => 'smtp.sendgrid.net', 
    :port => '587', 
    :authentication => :plain, 
    :user_name => ENV["SENDGRID_USERNAME"], 
    :password => ENV["SENDGRID_PASSWORD"], 
    :domain => 'heroku.com', 
    :enable_starttls_auto => true 
    } 

development.rb, en utilisant mailcatcher gemme:

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 
    config.action_mailer.perform_deliveries = true 
    config.action_mailer.raise_delivery_errors = true 
    config.action_mailer.default :charset => "utf-8" 
    config.action_mailer.delivery_method = :smtp 
    config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025} 
+0

Tout semble bien. Avez-vous lancé les addons heroku: create sendgrid: starter'? – boholdyjeramae

+0

Merci pour votre réponse! Je l'ai fait - en fait, cependant, il semble qu'il a commencé à travailler, après environ deux jours de retard. Pas vraiment sûr pourquoi, mais ça marche maintenant - j'avais juste oublié de revenir à cette question et de la marquer. Merci! –

Répondre

0

Ma réponse Il semble en fait le code ci-dessus fonctionne très bien , et il y avait simplement un retard dans le démarrage de sendgrid. Il a fallu environ deux jours, je ne sais pas pourquoi, mais maintenant ça marche bien sans une réelle modification du code