asxpio/lib/mailer.rb
Sergei Poljanski 12d29dec0c
All checks were successful
Build and Deploy to Production / test (push) Successful in 25s
Build and Deploy to Production / build (push) Successful in 1m1s
Build and Deploy to Production / deploy (push) Successful in 38s
mailer: send account emails as "asxp.io admin"
Invite and reset mails reused MAIL_FROM, whose display name is still
"IE Sergei Poljanski Contact Form" from the removed contact form. Keep
its verified address but use "asxp.io admin" as the name (overridable
with ADMIN_MAIL_NAME).

Assisted-by: Claude:opus-5
2026-10-10 08:50:30 +04:00

109 lines
2.8 KiB
Ruby

require 'mail'
module Mailer
module_function
def configure!
Mail.defaults do
delivery_method :smtp,
address: ENV.fetch('SMTP_ADDR'),
port: ENV.fetch('SMTP_PORT').to_i,
user_name: ENV.fetch('SMTP_USER'),
password: ENV.fetch('SMTP_PASSWORD'),
authentication: :plain,
enable_starttls_auto: true
end
end
def notify_owner(name:, email:, subject:, message:, ip:)
from = ENV.fetch('MAIL_FROM')
to = ENV.fetch('MAIL_TO')
subj = subject.to_s.strip.empty? ? 'Contact form submission' : subject.to_s.strip
body = <<~BODY
New contact form submission on asxp.io.
From: #{name} <#{email}>
Subject: #{subj}
IP: #{ip}
Time: #{Time.now.utc.iso8601}
---
#{message}
BODY
Mail.deliver do
from from
to to
reply_to email
subject "[asxp.io] #{subj}"
body body
end
end
def confirm_visitor(name:, email:, subject:, message:)
from = ENV.fetch('MAIL_FROM')
to = ENV.fetch('MAIL_TO')
subj = subject.to_s.strip.empty? ? '(blank)' : subject.to_s.strip
body = <<~BODY
Hi #{name},
Thanks for contacting IE Sergei Poljanski. I've received your message
and will get back to you as soon as possible.
For your records, here's what you sent:
Subject: #{subj}
#{message}
--
IE Sergei Poljanski
ie@asxp.io · https://asxp.io
BODY
Mail.deliver do
from from
to email
reply_to to
subject 'Thanks for contacting IE Sergei Poljanski'
body body
end
end
# Invite / password-reset email with a one-time link.
# Account mail keeps MAIL_FROM's verified address but not its display name
# ("… Contact Form"); ADMIN_MAIL_NAME overrides the default.
def admin_from
addr = Mail::Address.new(ENV.fetch('MAIL_FROM'))
addr.display_name = ENV.fetch('ADMIN_MAIL_NAME', 'asxp.io admin')
addr.format
end
def account_link(to:, username:, url:, kind:)
from = admin_from
subj, intro, ttl =
if kind == 'invite'
['Your asxp.io admin account', "An account \"#{username}\" was created for you on the asxp.io admin.\nSet your password here:", '48 hours']
else
['Reset your asxp.io admin password', "Someone (hopefully you) asked to reset the password for \"#{username}\".\nSet a new one here:", '1 hour']
end
body = <<~BODY
#{intro}
#{url}
The link works once and expires in #{ttl}. If you didn't expect this
email, ignore it.
--
asxp.io
BODY
Mail.deliver do
from from
to to
subject subj
body body
end
end
end