Я пытаюсь создать форму, чтобы посетители могли отправлять электронную почту на фиксированный адрес без загромождения базы данных. Когда я проверить форму, рельсы возвращает эту ошибку ...Rails пишу сам по себе с помощью actionmailer и activemodel, SMTPAuthenticationError
Net::SMTPAuthenticationError in ContactsController#create
Оказывается, ответ должен разрешить доступ к Gmail для менее защищенных приложений. Как сохранить функциональность без снижения безопасности?
контроллеры/contacts_controller.rb
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
if @contact.valid?
ContactMailer.contact_submit(@contact).deliver
flash[:notice] = "Thank you for your email, I'll respond shortly"
redirect_to new_contact_path
else
render :new
end
end
end
отправители/contact_mailer.rb
class ContactMailer < ActionMailer::Base
default to: "#{ENV['GMAIL_USERNAME']}@gmail.com"
def contact_submit(msg)
@msg = msg
mail(from: @msg.email, name: @msg.name, message: @msg.message)
end
end
модели/contact.rb
class Contact
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :message
validates_format_of :email, :with => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
validates_presence_of :message
validates_presence_of :name
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
конфигурации/среда/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default :charset => 'utf-8'
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'localhost:3000',
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
конфигурации/среда/production.rb
config.action_mailer.default_url_options = { host: ENV['WEBSITE'] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: ENV['WEBSITE'],
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
Насколько я помню, у меня возникла аналогичная проблема, когда я попытался отправить письмо на свой адрес gmail. IIRC это связано с настройками безопасности G, да. Я решил это с помощью бесплатной почтовой службы, например Mailtrap. Это будет для вас вариант? Mailtrap ловит все письма, отправленные из вашего приложения. – Mauddev
Я настроил параметры stmp, код указан выше. Я также использую фиксированный адрес электронной почты, он находится в моем файле env и указан в приведенном выше коде как константа ENV. –
Итак, вы настроили свои настройки в своей учетной записи GMail? на этот ответ SO: http://stackoverflow.com/questions/25872389/rails-4-how-to-correctly-configure-smtp-settings-gmail#answer-32019587 – leifg