Class: Studio::MailTransport
- Inherits:
-
Object
- Object
- Studio::MailTransport
- Defined in:
- lib/studio/mail_transport.rb
Defined Under Namespace
Classes: Result
Class Method Summary collapse
- .configure!(env: ENV, rails_env: defined?(Rails) ? Rails.env : "development", action_mailer: defined?(ActionMailer) ? ActionMailer::Base : nil, logger: defined?(Rails) ? Rails.logger : nil, mailer_from: defined?(Studio) && Studio.respond_to?(:mailer_from) ? Studio.mailer_from : nil, resend_loader: method(:load_resend!), resend_configurer: method(:configure_resend!)) ⇒ Object
- .configure_resend!(api_key) ⇒ Object
- .configure_ses!(env:, action_mailer:) ⇒ Object
- .load_resend! ⇒ Object
Class Method Details
.configure!(env: ENV, rails_env: defined?(Rails) ? Rails.env : "development", action_mailer: defined?(ActionMailer) ? ActionMailer::Base : nil, logger: defined?(Rails) ? Rails.logger : nil, mailer_from: defined?(Studio) && Studio.respond_to?(:mailer_from) ? Studio.mailer_from : nil, resend_loader: method(:load_resend!), resend_configurer: method(:configure_resend!)) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/studio/mail_transport.rb', line 8 def configure!(env: ENV, rails_env: defined?(Rails) ? Rails.env : "development", action_mailer: defined?(ActionMailer) ? ActionMailer::Base : nil, logger: defined?(Rails) ? Rails.logger : nil, mailer_from: defined?(Studio) && Studio.respond_to?(:mailer_from) ? Studio.mailer_from : nil, resend_loader: method(:load_resend!), resend_configurer: method(:configure_resend!)) raise ArgumentError, "action_mailer is required" unless action_mailer if rails_env.to_s == "test" return Result.new(transport: :test, delivery_method: action_mailer.delivery_method, message: "test environment skipped") end selected = env["MAIL_TRANSPORT"].to_s.downcase ses_ready = selected == "ses" && present?(env["SES_SMTP_USERNAME"]) && present?(env["SES_SMTP_PASSWORD"]) if selected == "ses" && !ses_ready log(logger, :warn, "[mail] MAIL_TRANSPORT=ses but SES_SMTP_USERNAME/PASSWORD missing - keeping fallback transport") elsif present?(selected) && !%w[ses resend].include?(selected) log(logger, :warn, "[mail] unknown MAIL_TRANSPORT=#{selected.inspect} - keeping fallback transport") end if ses_ready configure_ses!(env: env, action_mailer: action_mailer) region = env.fetch("SES_REGION", "us-east-2") log(logger, :info, "[mail] transport=SES region=#{region} from=#{mailer_from}") return Result.new(transport: :ses, delivery_method: action_mailer.delivery_method, message: "SES SMTP active") end if present?(env["RESEND_API_KEY"]) resend_loader.call resend_configurer.call(env["RESEND_API_KEY"]) action_mailer.delivery_method = :resend log(logger, :info, "[mail] transport=Resend from=#{mailer_from}") return Result.new(transport: :resend, delivery_method: action_mailer.delivery_method, message: "Resend active") end Result.new(transport: :default, delivery_method: action_mailer.delivery_method, message: "no transactional transport configured") end |
.configure_resend!(api_key) ⇒ Object
65 66 67 |
# File 'lib/studio/mail_transport.rb', line 65 def configure_resend!(api_key) Resend.api_key = api_key end |
.configure_ses!(env:, action_mailer:) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/studio/mail_transport.rb', line 48 def configure_ses!(env:, action_mailer:) region = env.fetch("SES_REGION", "us-east-2") action_mailer.delivery_method = :smtp action_mailer.smtp_settings = { address: env.fetch("SES_SMTP_HOST", "email-smtp.#{region}.amazonaws.com"), port: env.fetch("SES_SMTP_PORT", 587).to_i, user_name: env["SES_SMTP_USERNAME"], password: env["SES_SMTP_PASSWORD"], authentication: :login, enable_starttls_auto: true } end |
.load_resend! ⇒ Object
61 62 63 |
# File 'lib/studio/mail_transport.rb', line 61 def load_resend! require "resend" end |