如何实现发送邮件的功能

发送电邮的功能,如何实现?

以购物网站为例,当消费者下单后,系统会自动发封订单通知的电邮给消费者,说已经收到消费者的订单。这种发送电邮的功能,要如何实现呢?

我们需要7步。

Step1: 我们需要一个mailer,这里我们取名为OrderMailer
rails g mailer OrderMailer

运行结果如下,会产生mailers下的档案、views下的档案,以及test的文件



Step2: 定义好系统邮件的发送地址

app/mailers/application_mailer.rb档案中,将默认的发送地址,改成系统邮箱地址

default from: "[email protected]"



Step3: 定义好一个method,用来执行“发订单通知”的行为

在第一步中产生的档案app/mailers/order_mailer.rb中,定义这个method,这里取名为 notify_order_placed(order)

def notify_order_placed(order)
  @order = order
  @order.user = order.user
  mail(to: @order.user.email, from: "[JDStore] 感谢您完成本次下单,以下是您购物明细#{@order}")
end


Step4: 在消费者“下单”这个行为之后,执行上面的“发订单通知”这个行为

消费者“下单”这个行为,通常是已经在controller里定义的,此处的档案是app/controllers/orders_controller.rb。在这里,我们加上一行:OrderMailer.notify_order_placed(@order).deliver!

def create
  @order = Order.new(order_params)
  @order.save
  OrderMailer.notify_order_placed(@order).deliver!
  redirect_to order_path(@order)
end


Step5: 新增一个view文件,并写好寄送邮件里面的具体内容

touch app/views/order_mailer/notify_order_placed.html.erb

订单明细
<%= link_to("订单连结", order_url(@order))%>

#略


Step6: 上面我们已经定义好了action, view。现在,我们需要有东西,复制传递、打开邮件。需要安装一个gem
gem "letter_opener", group: :development


Step7: 在config/environments/development.rb中,配置好设置,加入两行
config.action_mailer.default_url_options = { host: "localhost:3000: }
config.action_mailer.delivery_method = :letter_opener

bundle install
rails s

总结

完成以上7步,就创建了消费者下单后、系统自动发送通知邮件的功能,通知邮件部分截图如下:


你可能感兴趣的:(如何实现发送邮件的功能)