Rails 上的邮件表格后的电子邮件通知(给用户)
Email notification (to user) after mail form on Rails
我是 Rails 的新手,我想在我的应用程序中添加一个 "subscribe" 功能。
每当有人订阅我的网站时,我确实设法收到通知(通过电子邮件)。我现在要做的是向用户发送一条通知,表示感谢。
我有:
/models/contact.rb
class Contact < MailForm::Base
attribute :name
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, :captcha => true
def headers
{
:subject => "New Subscription:",
:to => "email@example.com",
:from => "email@example.com"
}
end
end
/controllers/contacts_controller.rb
class ContactsController < ApplicationController
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
redirect_to(:back)
else
#TODO fail notification
redirect_to(:back)
end
end
end
我尝试了什么:
- 使用 ActionMailer::Base class 发送电子邮件,但我无法从表单中检索参数[:contact][:email],因此无法通过电子邮件发送回复
- 使用mailform发送多封邮件,但我没有实现
我的问题是我没有用户模型,也不需要用户模型,因为此应用上没有存储空间。
如果我可以建议您从 ApplicationRecord 生成联系人模型并存储所有订阅您网站的人。然后您可以使用 ActiveJob 发送它们 谢谢通知。然后您还可以将通知添加到您的电子邮件中,以便在有人申请您的网站时收到通知。
以下是一些更改:
bin/rails g model Contact name:string email:string message:text is_sent:boolean
请注意,我添加了一个布尔值字段以指示消息已发送,但您可以保留它。
因此,我没有使用 model.contact 并继承自 MailForm::Base,而是创建了一个联系人模型,它将您的联系人存储到数据库中。我认为 ti 是一个很好的做法,因为您以后可以参考这些用户并可能从他们创建用户帐户或做其他有用的事情。
在您的控制器中,当您保存联系人记录时,您可以使用 ActiveJob 启动电子邮件发送或使用默认 Mailer 发送电子邮件。所以你的控制器里会有这样的东西
def create
@contact = Contact.create(contact_params)
if @contact.persisted?
ContactMailer.say_thank_you(@contact).deliver_now
ContactMailer.notify_webmaster(@contact).deliver_now
# do the success redirect...
else
# do the failed redirect...handle error etc
end
所以您首先要将记录保存到数据库,检查是否已保存,然后使用不同的电子邮件模板通知用户和网站管理员。要生成我在示例 say_thank_you 和 notify_webmaster 中使用的操作电子邮件方法,请参阅入门指南。
http://guides.rubyonrails.org/action_mailer_basics.html
由于您是 rails 的新手,我假设您熟悉创建迁移和允许参数 contact_params...params.require(:contact).permit(:name .... - 您可以使用默认脚手架并检查控制器内部代码生成的代码。
在我上面的示例中,我使用 is_sent 布尔值 属性,默认情况下我将其设置为 false。然后,一旦 ActionMailer 发送电子邮件,我就会更新此字段或稍后重试。只是为了知道哪些人收到了电子邮件,但这是可选的。
希望对您有所帮助。
我是 Rails 的新手,我想在我的应用程序中添加一个 "subscribe" 功能。
每当有人订阅我的网站时,我确实设法收到通知(通过电子邮件)。我现在要做的是向用户发送一条通知,表示感谢。
我有:
/models/contact.rb
class Contact < MailForm::Base
attribute :name
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message
attribute :nickname, :captcha => true
def headers
{
:subject => "New Subscription:",
:to => "email@example.com",
:from => "email@example.com"
}
end
end
/controllers/contacts_controller.rb
class ContactsController < ApplicationController
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
redirect_to(:back)
else
#TODO fail notification
redirect_to(:back)
end
end
end
我尝试了什么:
- 使用 ActionMailer::Base class 发送电子邮件,但我无法从表单中检索参数[:contact][:email],因此无法通过电子邮件发送回复
- 使用mailform发送多封邮件,但我没有实现
我的问题是我没有用户模型,也不需要用户模型,因为此应用上没有存储空间。
如果我可以建议您从 ApplicationRecord 生成联系人模型并存储所有订阅您网站的人。然后您可以使用 ActiveJob 发送它们 谢谢通知。然后您还可以将通知添加到您的电子邮件中,以便在有人申请您的网站时收到通知。
以下是一些更改:
bin/rails g model Contact name:string email:string message:text is_sent:boolean
请注意,我添加了一个布尔值字段以指示消息已发送,但您可以保留它。
因此,我没有使用 model.contact 并继承自 MailForm::Base,而是创建了一个联系人模型,它将您的联系人存储到数据库中。我认为 ti 是一个很好的做法,因为您以后可以参考这些用户并可能从他们创建用户帐户或做其他有用的事情。
在您的控制器中,当您保存联系人记录时,您可以使用 ActiveJob 启动电子邮件发送或使用默认 Mailer 发送电子邮件。所以你的控制器里会有这样的东西
def create
@contact = Contact.create(contact_params)
if @contact.persisted?
ContactMailer.say_thank_you(@contact).deliver_now
ContactMailer.notify_webmaster(@contact).deliver_now
# do the success redirect...
else
# do the failed redirect...handle error etc
end
所以您首先要将记录保存到数据库,检查是否已保存,然后使用不同的电子邮件模板通知用户和网站管理员。要生成我在示例 say_thank_you 和 notify_webmaster 中使用的操作电子邮件方法,请参阅入门指南。
http://guides.rubyonrails.org/action_mailer_basics.html
由于您是 rails 的新手,我假设您熟悉创建迁移和允许参数 contact_params...params.require(:contact).permit(:name .... - 您可以使用默认脚手架并检查控制器内部代码生成的代码。
在我上面的示例中,我使用 is_sent 布尔值 属性,默认情况下我将其设置为 false。然后,一旦 ActionMailer 发送电子邮件,我就会更新此字段或稍后重试。只是为了知道哪些人收到了电子邮件,但这是可选的。
希望对您有所帮助。