Я пытаюсь добавить простую форму электронной почты в свое приложение, чтобы я мог получать электронные письма от пользователей. Я следовал некоторым учебникам, и в итоге мне удалось отправить мне письма в режиме разработки. Вот как я это сделал:
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, или оба.
Итак, в заключение я хотел бы получить некоторую информацию о том, какие услуги мне действительно нужны. Спасибо!