Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我如何从gem发送简单邮件,而不需要ActionMailer,但使用它的配置(如果存在)?_Ruby_Email_Configuration_Rubygems_Actionmailer - Fatal编程技术网

Ruby 我如何从gem发送简单邮件,而不需要ActionMailer,但使用它的配置(如果存在)?

Ruby 我如何从gem发送简单邮件,而不需要ActionMailer,但使用它的配置(如果存在)?,ruby,email,configuration,rubygems,actionmailer,Ruby,Email,Configuration,Rubygems,Actionmailer,我有一个gem,在某些情况下,它会发送包含信息的非常简单的电子邮件。他们有一个非常简单、硬编码的主体和主题 正因为如此,我需要邮件并直接使用它,而不是ActionMailer。这样,我可以让我的gem用户不用ActionMailer,我也不必在我的gem中创建Mailer本身,这太过分了 我的问题是关于mail/actionmailer的配置 对于将直接使用邮件的MyGem用户,他们将设置配置,MyGem将神奇地能够发送邮件,一切都很好。但是,我确实希望大多数人在他们的项目中使用ActionMa

我有一个gem,在某些情况下,它会发送包含信息的非常简单的电子邮件。他们有一个非常简单、硬编码的主体和主题

正因为如此,我需要邮件并直接使用它,而不是ActionMailer。这样,我可以让我的gem用户不用ActionMailer,我也不必在我的gem中创建Mailer本身,这太过分了

我的问题是关于mail/actionmailer的配置

对于将直接使用邮件的MyGem用户,他们将设置配置,MyGem将神奇地能够发送邮件,一切都很好。但是,我确实希望大多数人在他们的项目中使用ActionMailer,他们的环境初始值设定项中会有ActionMailer配置,我希望我的gem能够使用它,而不是强迫我的用户两次配置他们的电子邮件设置

我一直在看Mail和ActionMailer的代码,但我还没有弄清楚初始化器中设置的ActionMailer配置最终是如何滴落到Mail的。很明显,不知怎么的,但我还不知道是怎么回事

最好的方法是什么

是否有任何gems允许您使用Mail或ActionMailer,并且只使用您已经为它们添加的配置


我不确定我的描述是否足够清楚。。。要澄清我想要什么:

在my 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
当我的gem需要发送电子邮件时:

  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!
这正是我所需要的

  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!