Ruby 我如何从gem发送简单邮件,而不需要ActionMailer,但使用它的配置(如果存在)?
我有一个gem,在某些情况下,它会发送包含信息的非常简单的电子邮件。他们有一个非常简单、硬编码的主体和主题 正因为如此,我需要邮件并直接使用它,而不是ActionMailer。这样,我可以让我的gem用户不用ActionMailer,我也不必在我的gem中创建Mailer本身,这太过分了 我的问题是关于mail/actionmailer的配置 对于将直接使用邮件的MyGem用户,他们将设置配置,MyGem将神奇地能够发送邮件,一切都很好。但是,我确实希望大多数人在他们的项目中使用ActionMailer,他们的环境初始值设定项中会有ActionMailer配置,我希望我的gem能够使用它,而不是强迫我的用户两次配置他们的电子邮件设置 我一直在看Mail和ActionMailer的代码,但我还没有弄清楚初始化器中设置的ActionMailer配置最终是如何滴落到Mail的。很明显,不知怎么的,但我还不知道是怎么回事 最好的方法是什么 是否有任何gems允许您使用Mail或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
我不确定我的描述是否足够清楚。。。要澄清我想要什么: 在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!