mailForm 不在本地发送邮件
mailForm not sending mail locally
我想创建一个简单的联系表单,用户只需写下他的姓名、电子邮件和消息,就可以将消息发送到特定的邮件地址(我的)。我正在使用 mailForm 来完成它,但它不起作用,我不知道为什么,我需要一些帮助...我显然看过以前的主题,但它没有帮助我。
这是我的代码:
型号
class Contact < MailForm::Base
attribute :name, validate: true, length: { minimum: 2 }
attribute :email, validate: /\A[^@\s]+@[^@\s]+\z/i
attribute :message, validate: true, length: { minimum: 10 }
attribute :nickname, captcha: true
def headers
{ subject: "My Contact Form",
to: "mypersonalemail@gmail.com",
from: %("#{name}" <#{email}>)
}
end
end
控制器
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contacts_params)
@contact.request = request
if @contact.deliver
flash.now[:notice] = 'Merci pour votre message, je reviens vers vous très prochainement !'
else
flash.now[:alert] = "Votre message n'a pas pu être envoyé, veuillez vérifier les données saisies"
render :new
end
end
private
def contacts_params
params.require(:contact).permit(:name, :email, :message)
end
end
因为这是一个 gmail 地址,所以我有这个
development.rb
config.action_mailer.default_url_options = { host: 'https://localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'mypersonalemail@gmail.com',
password: 'mypersonalpassword',
authentication: 'plain',
enable_starttls_auto: true }
一切正常,尤其是当我在控制台中输入以下内容时:
Running via Spring preloader in process 4086
Loading development environment (Rails 6.0.3.3)
irb(main):001:0> c = Contact.new(name: 'Nobody', email: 'nobody@email.com', message: 'testestest')
=> #<Contact:0x00007fe140203e00 @name="Nobody", @email="nobody@email.com", @message="testestest">
irb(main):002:0> c.valid?
=> true
irb(main):003:0> c.deliver
Rendering /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb
Rendered /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb (Duration: 22.8ms | Allocations: 1843)
MailForm::Notifier#contact: processed outbound mail in 62.8ms
Delivered mail 5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail (890.4ms)
Date: Thu, 03 Dec 2020 15:51:34 +0200
From: Nobody <nobody@email.com>
To: mypersonalemail@gmail.com
Message-ID: <5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail>
Subject: My Contact Form
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<h4 style="text-decoration:underline">My Contact Form</h4>
<p><b>Name:</b>
Nobody</p>
<p><b>Email:</b>
nobody@email.com</p>
<p><b>Message:</b>
testestest</p>
=> true
在那之后,我没有收到任何邮件,即使是垃圾邮件。我的意思是,c.valid?是真的所以我真的不明白为什么它不发送任何东西。我检查了电子邮件地址和密码,没有错误。我在安全性较低的应用程序上禁用了 gmail 安全性,因为我收到了来自 gmail 的通知(所以这意味着他们没有发现什么?)。
好吧,请帮忙:(
你添加了吗
config.action_mailer.perform_deliveries = true
在你的 config/environments/development.rb
?
为了 rails 在本地发送电子邮件,您需要在您的开发环境中添加它。
我想创建一个简单的联系表单,用户只需写下他的姓名、电子邮件和消息,就可以将消息发送到特定的邮件地址(我的)。我正在使用 mailForm 来完成它,但它不起作用,我不知道为什么,我需要一些帮助...我显然看过以前的主题,但它没有帮助我。
这是我的代码:
型号
class Contact < MailForm::Base
attribute :name, validate: true, length: { minimum: 2 }
attribute :email, validate: /\A[^@\s]+@[^@\s]+\z/i
attribute :message, validate: true, length: { minimum: 10 }
attribute :nickname, captcha: true
def headers
{ subject: "My Contact Form",
to: "mypersonalemail@gmail.com",
from: %("#{name}" <#{email}>)
}
end
end
控制器
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contacts_params)
@contact.request = request
if @contact.deliver
flash.now[:notice] = 'Merci pour votre message, je reviens vers vous très prochainement !'
else
flash.now[:alert] = "Votre message n'a pas pu être envoyé, veuillez vérifier les données saisies"
render :new
end
end
private
def contacts_params
params.require(:contact).permit(:name, :email, :message)
end
end
因为这是一个 gmail 地址,所以我有这个 development.rb
config.action_mailer.default_url_options = { host: 'https://localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
user_name: 'mypersonalemail@gmail.com',
password: 'mypersonalpassword',
authentication: 'plain',
enable_starttls_auto: true }
一切正常,尤其是当我在控制台中输入以下内容时:
Running via Spring preloader in process 4086
Loading development environment (Rails 6.0.3.3)
irb(main):001:0> c = Contact.new(name: 'Nobody', email: 'nobody@email.com', message: 'testestest')
=> #<Contact:0x00007fe140203e00 @name="Nobody", @email="nobody@email.com", @message="testestest">
irb(main):002:0> c.valid?
=> true
irb(main):003:0> c.deliver
Rendering /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb
Rendered /home/slegrez/.rbenv/versions/2.6.6/lib/ruby/gems/2.6.0/gems/mail_form-1.8.1/lib/mail_form/views/mail_form/contact.erb (Duration: 22.8ms | Allocations: 1843)
MailForm::Notifier#contact: processed outbound mail in 62.8ms
Delivered mail 5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail (890.4ms)
Date: Thu, 03 Dec 2020 15:51:34 +0200
From: Nobody <nobody@email.com>
To: mypersonalemail@gmail.com
Message-ID: <5fc8ed66de0be_ff62b269f0d999015752@DESKTOP-DQRGQT4.mail>
Subject: My Contact Form
Mime-Version: 1.0
Content-Type: text/html;
charset=UTF-8
Content-Transfer-Encoding: 7bit
<h4 style="text-decoration:underline">My Contact Form</h4>
<p><b>Name:</b>
Nobody</p>
<p><b>Email:</b>
nobody@email.com</p>
<p><b>Message:</b>
testestest</p>
=> true
在那之后,我没有收到任何邮件,即使是垃圾邮件。我的意思是,c.valid?是真的所以我真的不明白为什么它不发送任何东西。我检查了电子邮件地址和密码,没有错误。我在安全性较低的应用程序上禁用了 gmail 安全性,因为我收到了来自 gmail 的通知(所以这意味着他们没有发现什么?)。 好吧,请帮忙:(
你添加了吗
config.action_mailer.perform_deliveries = true
在你的 config/environments/development.rb
?
为了 rails 在本地发送电子邮件,您需要在您的开发环境中添加它。