Rails 发送邮件

首先需要在 config/application.rb 中配置发送邮件的相关配置

config.action_mailer.perform_caching       = false
config.action_mailer.perform_deliveries    = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method       = :smtp
config.action_mailer.smtp_settings         = {
    address:              'smtp.exmail.qq.com',
    port:                 465,
    ssl:                  true,
    user_name:            '',
    password:             '',
    authentication:       'plain',
    enable_starttls_auto: true,
}

使用脚手架工具生成邮件视图模板,脚手架工具会为我们自动创建发送邮件的方法、视图模板、测试以及预览组件

$ rails g mailer welcome
Running via Spring preloader in process 59807
      create  app/mailers/welcome_mailer.rb
      invoke  erb
      create    app/views/welcome_mailer
      invoke  test_unit
      create    test/mailers/welcome_mailer_test.rb
      create    test/mailers/previews/welcome_mailer_preview.rb

打开 app/mailers/application_mailer.rb 文件,替换 default from 后面的参数为发件人邮箱,如:

class ApplicationMailer < ActionMailer::Base
  default from: '[email protected]'
  layout 'mailer'
end

打开 app/mailers/welcome_mailer.rb 文件,编辑收件人和邮件主题,如:

class WelcomeMailer < ApplicationMailer
  def welcome_mail(member)
    @member = member
    mail to: @member.email, subject: 'Welcome to My Awesome Site'
  end
end

app/views/welcome_mailer 文件夹中创建 welcome_mailer.html.erb 文件,使用 html 来编写邮件的视图。如下:

Welcome to example.com, <%= @member.username %>

You have successfully signed up to example.com

Thanks for joining and have a great day!

然后,你就可以测试发送邮件了。

WelcomeMailer.welcome_mail(@member).deliver_later # 延迟发送邮件
WelcomeMailer.welcome_mail(@member).deliver_now   # 立即发送邮件

Rails 可以支持预览邮件内容。打开 test/mailers/previews/welcome_mailer_preview.rb 文件。添加与发送邮件同名方法,如:

class WelcomeMailerPreview < ActionMailer::Preview
  def welcome_mail
    WelcomeMailer.welcome_mail(Member.first)
  end
end

然后启动你的 Rails 应用,访问 http://localhost:3000/rails/mailers/welcome_mailer/welcome_mail 进行预览。

关于发送邮件更多的资料可以在 https://ruby-china.github.io/rails-guides/action_mailer_basics.html 中查看。

你可能感兴趣的:(Rails 发送邮件)