gpt4 book ai didi

ruby - 如何从 gem 发送简单的邮件,而不需要 ActionMailer,但如果存在则使用其配置?

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:52 24 4
gpt4 key购买 nike

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

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

我的问题是关于邮件/actionmailer 的配置。

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

我一直在查看 Mail 和 ActionMailer 的代码,但一直无法弄清楚在初始化程序中设置的 ActionMailer 配置如何最终渗透到 Mail。它显然以某种方式起作用,但我还没有找到方法。

执行此操作的最佳方法是什么?

是否有任何 gem 允许您使用 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

我希望我的 gem 的配置是这样的:

MyGem.configure do |config|
config.email_target = "blah@blah.com"
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_mailer) 中,它不会。

我可以在不要求用户进行额外配置的情况下完成这项工作吗?

最佳答案

我想通了。基本上,wrap_delivery_behavior 将 ActionMailer 配置复制到 Mail 中,因此如果定义了 ActionMailer 则调用 wrap_delivery_behavior 可以解决问题:

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com