emails: fix sending emails to invalid addresses.

Fix mailers to not attempt deliveries to invalid or nonexistent email
addresses. This usually happened when someone changed their email, and
we tried to send a confirmation email to a nonexistent address.
This commit is contained in:
evazion
2022-01-02 12:23:01 -06:00
parent 9ffc269e43
commit 32613f9bb1
8 changed files with 30 additions and 13 deletions

View File

@@ -5,4 +5,11 @@
# @see https://guides.rubyonrails.org/action_mailer_basics.html
class ApplicationMailer < ActionMailer::Base
default from: "#{Danbooru.config.canonical_app_name} <#{Danbooru.config.contact_email}>", content_type: "text/html"
def mail(user, require_verified_email:, **options)
to = email_address_with_name(user.email_address&.address, user.name)
message = super(to: to, **options)
message.perform_deliveries = user.can_receive_email?(require_verified_email: require_verified_email)
message
end
end

View File

@@ -7,24 +7,24 @@ class UserMailer < ApplicationMailer
# The email sent when a user receives a DMail.
def dmail_notice(dmail)
@dmail = dmail
mail to: dmail.to.email_with_name, subject: "#{Danbooru.config.app_name} - Message received from #{dmail.from.name}"
mail(dmail.to, require_verified_email: true, subject: "#{Danbooru.config.app_name} - Message received from #{dmail.from.name}")
end
# The email sent when a user requests a password reset.
def password_reset(user)
@user = user
mail to: @user.email_with_name, subject: "#{Danbooru.config.app_name} password reset request"
mail(@user, require_verified_email: false, subject: "#{Danbooru.config.app_name} password reset request")
end
# The email sent when a user changes their email address.
def email_change_confirmation(user)
@user = user
mail to: @user.email_with_name, subject: "Confirm your email address"
mail(@user, require_verified_email: false, subject: "Confirm your email address")
end
# The email sent when a new user signs up with an email address.
def welcome_user(user)
@user = user
mail to: @user.email_with_name, subject: "Welcome to #{Danbooru.config.app_name}! Confirm your email address"
mail(@user, require_verified_email: false, subject: "Welcome to #{Danbooru.config.app_name}! Confirm your email address")
end
end