Skip to content

Instantly share code, notes, and snippets.

@phawk
Created February 28, 2023 14:24
Custom Rails Newsletter using Postmark
# app/models/newsletter.rb
class Newsletter < ApplicationRecord
has_rich_text :content
def deliver!
if Rails.env.production?
# Postmark bulk API
client = Postmark::ApiClient.new(Rails.application.credentials.postmark_api_key)
messages = NewsletterSubscriber.active.map do |subscriber|
NewsletterMailer.send_newsletter(self, subscriber)
end
client.deliver_messages(messages)
else
NewsletterSubscriber.active.find_each do |subscriber|
NewsletterMailer.send_newsletter(self, subscriber).deliver_now
end
end
update(sent_at: Time.current)
end
end
# app/mailers/newsletter_mailer.rb
class NewsletterMailer < ApplicationMailer
def send_newsletter(newsletter, subscriber)
@newsletter = newsletter
@subscriber = subscriber
@unsubscribe_token = @subscriber.signed_id
headers["MESSAGE-STREAM"] = "broadcast"
mail to: subscriber.email, subject: newsletter.subject
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment