2017-08-20 4 views
0

J'ai été en mesure de créer un formulaire de contact que lorsqu'un utilisateur clique sur soumettre - son envoyer un e-mail et que je reçois dans ma boîte de réception. Je voudrais que cet email soit envoyé via sendgrid pour que je puisse analyser les analyses. J'ai regardé le cours Gorails Sendgrid et j'ai pu envoyer un email via sendgrid mais je ne sais pas comment l'appliquer à mon formulaire de contact. J'ai listé mon code ci-dessous, toute aide serait incroyable. Merci beaucoup!Rails Comment lier un formulaire d'email avec Sendgrid?

new.html.erb (Formulaire de contact qui envoie un e-mail régulièrement lorsqu'un internaute clique Soumttre)

<div align="center"> 
<h3>Send A message to Us</h3> 
    <%= form_for @contact do |f| %> 
<div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name, :required => true %> 
</div> 
<div class="field"> 
    <%= f.label :email %><br> 
    <%= f.email_field :email, :required => true %> 
    </div> 
    <div class="field"> 
    <%= f.label :message %><br> 
    <%= f.text_area :message, :as => :text, :required => true %>  
</div> 
<div class="actions"> 
    <%= f.submit "Send Message", :class => "btn btn-primary btn-md"%> 
    </div> 
    <% end %> 
</div> 

contacts_controller.rb

class ContactsController < ApplicationController 
    def new 
@contact = Contact.new 
    end 
    def create 
@contact = Contact.new(contact_params) 
@contact.request = request 
if @contact.deliver 
    flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
else 
    flash.now[:error] = 'Cannot send message.' 
    render :new 
end 
    end 
    private 
    def contact_params 
    params.require(:contact).permit(:name, :email, :message) 
    end 
end 

Sendgrid.rb (à l'intérieur mon dossier config> initializers)

ActionMailer::Base.smtp_settings = { 
    :user_name => 'apikey', 
    :password => Rails.application.secrets.sendgrid_api_key, 
    :domain => 'tango.co', 
    :address => 'smtp.sendgrid.net', 
    :port => 587, 
    :authentication => :plain, 
    :enable_starttls_auto => true 
} 

development.rb

config.action_mailer.perform_caching = false 
config.action_mailer.delivery_method = :smtp 
ActionMailer::Base.smtp_settings = { 
:user_name => 'apikey', 
:password => Rails.application.secrets.sendgrid_api_key, 
:domain => 'tango.co', 
:address => 'smtp.sendgrid.net', 
:port => 587, 
:authentication => :plain, 
:enable_starttls_auto => true 
} 

Mailers dossier (je n'ai que deux fichiers Notification et demande aucun accord avec mes contacts Formulaire)

Répondre

0

je me suis dit ce que je manque pour cela. J'avais besoin de générer un mailer pour les contacts. Avec cela terminé et en ajoutant une ligne à mon contacts_controller.rb, je suis en mesure d'envoyer mes e-mails via SendGrid sans problemo :)

class ContactsController < ApplicationController 
def new 
@contact = Contact.new 
    end 
    def create 
@contact = Contact.new(contact_params) 
@contact.request = request 
if @contact.save 
    ContactMailer.new_request(@contact.id).deliver_later 
end 
if @contact.deliver 
    flash.now[:notice] = 'Thank you for your message. We will contact you soon!' 
else 
    flash.now[:error] = 'Cannot send message.' 
    render :new 
end 
    end 
    private 
    def contact_params 
    params.require(:contact).permit(:name, :email, :message) 
end 
end 

Contacts Mailer

class ContactMailer < ApplicationMailer 
def new_request 
end 
end