Как отправить письмо на Rails - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь добавить простую форму электронной почты в свое приложение, чтобы я мог получать электронные письма от пользователей. Я следовал некоторым учебникам, и в итоге мне удалось отправить мне письма в режиме разработки. Вот как я это сделал:

1) Я установил этот гем: 'mail_form';

2) Сгенерирован контроллер контактов:

#contacts_controller.rb

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

  def create
    @contact = Contact.new(params[:contact])
    @contact.request = request
    if @contact.deliver
      flash.now[:error] = nil
    else
      flash.now[:error] = 'Não foi possível enviar o email.'
    end
    redirect_back(fallback_location: vehicles_path)
  end
end

3) Я создал (вручную) модель контакта:

#contact.rb

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

  def headers
    {
      :subject => %("#{subject}"),
      :to => "myEmail@gmail.com",
      :from => %("#{name}" <#{email}>)
    }
  end
end

4) Отредактировал мою разработку. Rb

config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'gmail.com',
  user_name:            'myusername@gmail.com',
  password:             Rails.application.credentials.email_password,
  authentication:       :plain,
  enable_starttls_auto: true
}

5) Моя форма

<%= form_with model:contact do |f| %>
  <div class="field">
    <%= f.label "Name" %>
    <%= f.text_field :name, required: true %>
  </div>

  <div class="field">
    <%= f.label "Email" %>
    <%= f.email_field :email, required: true %>
  </div>

  <div class="field">
    <%= f.label "Subject" %>
    <%= f.text_field :subject, required: true %>
  </div>

  <div class="field">
    <%= f.label "Message" %>
    <%= f.text_area :message, as: :text, rows: 8, required: true %>
  </div>

  <div class="hidden">
    <%= f.email_field :nickname, hint: 'leave this field empty' %>
  </div>

  <div class="actions">
    <%= f.submit "Submit", class: "contact_submit" %>
  </div>
<% end %>

Это хорошо работало при разработке.

Теперь, однако, я не знаю, что делать на производстве. У меня уже есть мое приложение, размещенное в DigitalOcean с приложениями для одного щелчка, которое поставляется с уже установленным Postfix. Я не знаю, действительно ли мне нужен Postfix или нет, или мне нужен сервис, такой как SendGrid или MailGun, или оба.

Итак, в заключение я хотел бы получить некоторую информацию о том, какие услуги мне действительно нужны. Спасибо!

1 Ответ

0 голосов
/ 21 января 2019

gmail будет работать нормально, просто убедитесь, что вы установили менее безопасный для приложения вот ссылка

, а вот настройка, которая работает для моих приложений, вероятно, может быть вашей ссылкой:

config.action_mailer.default_url_options = { :host => "ip_address_from_digital_ocean" }
config.action_mailer.delivery_method=:smtp 
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'host_name' }

# Gmail SMTP server setup
ActionMailer::Base.smtp_settings = {
  :address => "smtp.gmail.com",
  :enable_starttls_auto => true,
  :port => 587,
  :authentication => :plain,
  :user_name => "username@gmail.com",
  :password => password
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...