Как отправить электронную почту в Rails по-настоящему - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу отправить электронное письмо из моего приложения в 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

user_controller.rb

def index
    UserMailer.sample_email.deliver_now
end

production.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
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Попробуйте включить этот параметр для получения электронной почты:

https://myaccount.google.com/lesssecureapps

0 голосов
/ 22 апреля 2020

Чтобы добавить функцию электронной почты в проект 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

Далее go в app / mailers и измените default from:

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

Это будет сообщать вашему приложению, что вы отправляете С этого электронного письма (вам нужно будет предоставить учетные данные позже ...)

Затем перейдите в созданный файл почтовых программ app/mailers/mailername_mailer.rb ВНИМАНИЕ: Он наследуется от ApplicationMailer, поэтому вы получите 'default from', который мы объявили выше.

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

Этот почтовый по сути класс, но создание экземпляров работает немного по-другому. Он создает экземпляр, когда вы называете это статически ... как если бы вы были моделью. Почта (to: x) - это учетная запись, на которую вы собираетесь отправить это письмо. Вы можете использовать это в вашем контроллере. Например:

ExampleController.rb

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

Для просмотра:

Классная функция для электронных писем - это предварительные просмотры, встроенные в рельсы. Тестовое действие может быть вызвано в вашем файле 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 так, чтобы он выглядел следующим образом ... хотя вам, вероятно, стоит поработать над разработкой, прежде чем переходить к производству, учитывая, что вам не всегда нужно применять передовые методы, пока вы не включите sh в производство.

  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}

имя_домена должно быть просто localhost: 3000 для разработки.

...