首页 > 解决方案 > 如何在 Rails 中真正发送电子邮件

问题描述

我想使用真实帐户从我的应用程序向 Gmail 发送电子邮件我的代码库在这个网站上https://guides.rubyonrails.org/action_mailer_basics.html,但是当我运行源代码时,电子邮件显示在终端上,但它没有发送到我的 Gmail 帐户。我应该怎么做才能将电子邮件发送到我的 Gmail 帐户,以便我可以在 中查看https://mail.google.com/mail/u/0/#inbox

这是我的代码:

user_mailer.rb

class UserMailer < ApplicationMailer
  default from: 'xuanle.khtn@gmail.com'

  def sample_email
    mail to: 'leanhxuan_t59@hus.edu.vn', subject: 'Test Mail Rails'
  end
end

用户控制器.rb

def index
    UserMailer.sample_email.deliver_now
end

生产.rb

config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
  :address              => "mail.google.com",
  :port                 => 587,
  :user_name            => 'xuanle.khtn@gmail.com',
  :password             => '********',
  :authentication       => "plain",
  :enable_starttls_auto => true
}

标签: ruby-on-railsmailer

解决方案


要将电子邮件功能添加到 rails 项目:

第一次运行

rails g mailer <mailername>

这会给你这个(你可以附加函数名,但让它保持简单)

  create  app/mailers/mailername_mailer.rb
  invoke  erb
  create    app/views/mailername_mailer
  invoke  test_unit
  create    test/mailers/mailername_mailer_test.rb
  create    test/mailers/previews/mailername_mailer_preview.rb

接下来转到应用程序/邮件程序并更改default from:

class ApplicationMailer < ActionMailer::Base
  default from: 'example@gmail.com'
  layout 'mailer'
end

这将告诉您的应用程序您是从这封电子邮件发送的(稍后您必须提供凭据...)

接下来进入您创建的邮件程序文件app/mailers/mailername_mailer.rb 注意:它继承自 ApplicationMailer,因此您将获得我们上面声明的“默认来源”。

class MailernameMailer < ApplicationMailer
  def request(arg)
    @arg = arg
    mail(to: "example@gmail.com", subject: @arg)
  end
end

这个邮件程序本质上是一个类,但实例化的工作方式有点不同。当您静态调用它时,它会创建一个实例……就像您调用模型一样。mail(to: x) 是您要将其邮寄到的帐户。您可以在控制器中使用它。像这样:

ExampleController.rb

def index
     MailernameMailer.request("Hi I'm paul").deliver_later
end

对于视图:

电子邮件的一个很酷的功能是内置于 Rails 中的预览。可以在您的文件中调用测试操作,该mailername_mailer_preview.rb文件位于test/mailers/previews.

这是它的样子:

def request(args)
    @name = args
    MailernameMailer.request(@name)
  end

就像上面在控制器中一样,您将添加实例化并调用函数..然后在您的视图中使用该数据:app/views/mailername_mailer/request.html.erb

并在以下位置预览:

http://localhost:3000/rails/mailers/mailername_mailer

您的邮件操作将自动路由到与函数同名的视图...

现在验证发件人帐户...(Gmail 需要一个有效帐户才能发送电子邮件)。将您的 production.rb 文件更改为如下所示..尽管您可能应该在进入生产之前将其用于开发,但考虑到您在推动生产之前并不总是需要最佳实践。

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      address: "smtp.gmail.com",
      port: 587,
      domain: "gmail.com",
      user_name: ENV["username"],
      password: ENV["password"],
      authentication: "plain"
  }
  config.action_mailer.default_url_options = {host: domain_name}

domain_name 应该只是 localhost:3000 用于开发。


推荐阅读