Можно ли заменить default из: на электронную почту из базы данных в Rails Action Mailer?

Я пытаюсь передать электронное письмо от пользователя в поле from: default, чтобы оно выглядело так, как будто оно пришло непосредственно от него. Вот что у меня сейчас. Есть ли способ ввести динамическую переменную в поле по умолчанию из поля?

class IntroMailer < ActionMailer::Base
      default from: "Me@gmail.com"

      def intro_email(intro)
        @intro = intro
        mail(to: @intro.person1_email, subject: 'Testing Intro Email')
      end
    end

3 ответа

Решение

Вы можете изменить это в действии Mailer mail метод:

class IntroMailer < ActionMailer::Base
  default from: "Me@gmail.com"

  def intro_email(intro, current_user)
    mail(to: intro.person1_email, subject: 'Testing Intro Email', from: current_user.email)
  end
end

но ПРЕДУПРЕЖДЕНИЕ. Почтовые клиенты, такие как Google, довольно умны в обнаружении спама. Если они увидят, что определенный SMTP-сервер отправляет электронные письма с большим количеством различных атрибутов "от", ваш рейтинг спама повысится, а ваши электронные письма будут отфильтрованы фильтрами спама. Чтобы обойти это, выберите один или два по умолчанию from электронные письма (например, support@mywebsite.com & jobs@mywebsite.com), которые соответствуют типу электронного письма, а затем добавить динамический reply_to атрибут вместо.

class IntroMailer < ActionMailer::Base
  default from: "ourteam@oursite.com"

  def intro_email(intro, current_user)
    mail(to: intro.person1_email, subject: 'Testing Intro Email', reply_to: full_from(current_user))
  end

  private

  def full_from(user)
    address = Mail::Address.new user.email
    address.display_name = user.full_name
    address.format
  end
end

По умолчанию это просто адрес по умолчанию, поэтому вы можете перезаписать его при отправке почты следующим образом:

mail(from: @some_object.mail, ...)

На самом деле нет, это вообще не работает в Rails 5.XX.

Другие вопросы по тегам