【问题标题】:Mailer default to邮件程序默认为
【发布时间】:2015-01-08 01:05:56
【问题描述】:

我有一个管理员电子邮件:

class AdminMailer < ApplicationMailer
  ADMIN_EMAIL = 'admin@gmail.com'

  def send1
    mail(to: ADMIN_EMAIL, subject: 'You have a new registered user')
  end

end

既然是管理员邮箱,我想知道,是否可以让邮件默认将电子邮件发送给管理员?比如:

class AdminMailer < ApplicationMailer
  default to: 'admin@gmail.com'

我从未见过to 选项,它存在吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    是的,默认值可以设置为:to参数。

    来自rails代码库的相关部分# You can set default values for any of the above headers (except +:date+)

    https://github.com/rails/rails/blob/f6b21d48ef15d4f39a530653c2ce7d0cfb458b46/actionmailer/lib/action_mailer/base.rb#L702-L729查看代码cmets

    # The main method that creates the message and renders the email templates. There are
    # two ways to call this method, with a block, or without a block.
    #
    # It accepts a headers hash. This hash allows you to specify
    # the most used headers in an email message, these are:
    #
    # * +:subject+ - The subject of the message, if this is omitted, Action Mailer will
    #   ask the Rails I18n class for a translated +:subject+ in the scope of
    #   <tt>[mailer_scope, action_name]</tt> or if this is missing, will translate the
    #   humanized version of the +action_name+
    # * +:to+ - Who the message is destined for, can be a string of addresses, or an array
    #   of addresses.
    # * +:from+ - Who the message is from
    # * +:cc+ - Who you would like to Carbon-Copy on this email, can be a string of addresses,
    #   or an array of addresses.
    # * +:bcc+ - Who you would like to Blind-Carbon-Copy on this email, can be a string of
    #   addresses, or an array of addresses.
    # * +:reply_to+ - Who to set the Reply-To header of the email to.
    # * +:date+ - The date to say the email was sent on.
    #
    # You can set default values for any of the above headers (except +:date+)
    # by using the ::default class method:
    #
    #  class Notifier < ActionMailer::Base
    #    default from: 'no-reply@test.lindsaar.net',
    #            bcc: 'email_logger@test.lindsaar.net',
    #            reply_to: 'bounces@test.lindsaar.net'
    #  end
    

    【讨论】:

      【解决方案2】:

      编辑:实际上我将mail 包装到设置默认选项的mail_to_user 中,因为这种方法会发送重复的电子邮件

      您可以在后续操作中执行此操作:

      class ApplicationMailer < ActionMailer::Base
        after_action :set_default_to
        after_action :set_default_subject
      
        def set_default_to
          mail.to ||= user_email(current_user) if current_user
        end
        
        def set_default_subject
          mail.subject ||= I18n.t(subject_key)
        end
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 1970-01-01
        • 2010-10-29
        • 2022-11-24
        • 2012-01-07
        相关资源
        最近更新 更多