Rails通过actionmailer和activemodel给我发电子邮件,SMTPAuthenticationError
问题描述:
我想要生成一个表单,以便访问者可以发送电子邮件到一个固定的地址而不会混乱数据库。当我测试的形式,轨道返回该错误......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
}
答
你配置SMTP Settings in ActiveMailer?
此外,当您仅使用谷歌smtp服务器的随机电子邮件地址时,您很可能会遇到垃圾邮件问题。
更好的主意是使用固定的发件人地址(例如您自己的地址)并将原始地址放在文本中。这就是大多数电子邮件表单的工作原理
编辑:根据another * answer,您需要在您的电子邮件设置中启用安全性较低的应用程序。
我记得当我试图邮寄到我自己的Gmail地址时遇到类似的问题。 IIRC与G安全设置有关,是的。我使用Mailtrap等免费邮件服务解决了这个问题。这对你来说是一种选择吗? Mailtrap捕获您从应用发送的所有邮件。 – Mauddev
我配置了stmp设置,代码在上面列出。我还使用了一个固定的电子邮件地址,它位于我的env文件中,并在上面的代码中作为ENV常量引用。 –
那么你是否已经在GMail帐户中配置了你的设置?到此SO回答:http://*.com/questions/25872389/rails-4-how-to-correctly-configure-smtp-settings-gmail#answer-32019587 – leifg