我有一个宝石,在某些情况下,会发送非常简单的电子邮件信息。他们有一个非常简单,硬编码的身体和主题。
因此,我需要邮件并直接使用它,而不是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/