我有一个宝石,在某些情况下,会发送非常简单的电子邮件信息。他们有一个非常简单,硬编码的身体和主题。
因此,我需要邮件并直接使用它,而不是ActionMailer。这样,我就可以让gem的用户不使用ActionMailer,也不必在gem中创建Mailer本身,这太过分了。
我的问题是关于mail/actionmailer的配置。
对于将直接使用邮件的gem用户,他们将设置配置,我的gem将神奇地能够发送邮件,一切都很好但是,我确实希望大多数人在他们的项目中使用ActionMailer,他们的环境初始值设定项中会有ActionMailer配置,我希望我的gem使用它,而不是强迫我的用户配置他们的电子邮件设置两次。
我一直在研究邮件和ActionMailer的代码,但我还不能弄清楚初始化器中设置的ActionMailer配置是如何逐渐向下传递到邮件的。很明显,不知怎么的,但我还没发现是怎么回事。
最好的方法是什么?
是否有任何gems允许您使用mail或actionmailer,并将只使用您已经为它们添加的配置?
我不确定我的描述是否足够清楚…为了澄清我想要的:
在我的gem的一个典型用户的初始值设定项中,actionmailer用户会遇到这样的情况:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
    user_name: "username",
    password: "password",
    domain: "blah.com",
    address: "smtp.sendgrid.net",
    port: 587,
    authentication: :plain,
    enable_starttls_auto: true
}

或者对于邮件用户:
Mail.defaults do
    delivery_method :smtp, {
        :address              => "smtp.gmail.com",
        :port                 => 587,
        :domain               => 'your.host.name',
        :user_name            => '<username>',
        :password             => '<password>',
        :authentication       => 'plain',
        :enable_starttls_auto => true  }

end

我希望我的宝石配置如下:
MyGem.configure do |config|
    config.email_target = "[email protected]"
end

当我的宝石需要发送电子邮件时:
  mail = Mail.new do
    from     MyGem.configuration.email_target
    to       MyGem.configuration.email_target
    subject  'Notification: #{something}'
    body     message_body
  end
  mail.deliver!

现在,在第二个配置场景(mail.defaults)中,这将起作用。
在第一个(config.action\u mailer)中,它不会。
我能在不要求用户额外配置的情况下让它正常工作吗?

最佳答案

我想出来了基本上,wrap_delivery_行为是将ActionMailer配置复制到邮件中的行为,因此,如果定义了ActionMailer,则调用wrap_delivery_行为可以解决问题:

  mail = Mail.new do
    from     recipient
    to       recipient
    subject  subject
    body     body
  end

  if defined?(ActionMailer)
    ActionMailer::Base.wrap_delivery_behavior(mail)
  end

  mail.deliver!

这正是我所需要的

关于ruby - 如何从gem发送简单邮件,而不需要ActionMailer,但使用其配置(如果存在)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27656765/

10-11 02:34