Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/mailers/application_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

class ApplicationMailer < ActionMailer::Base
prepend_view_path 'app/views/mailers'
default from: Rails.application.credentials.dig(:devise, :mailer_sender)
default from: Rails.application.credentials.dig(:sendgrid, :mailer_sender),
reply_to: 'lsa-evaluate-support@umich.edu'
layout 'mailer'
end
10 changes: 8 additions & 2 deletions app/mailers/results_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,15 @@ def entry_evaluation_notification(entry, round)

subject = "Evaluation Results for \"#{@entry.title}\" - #{@contest_description.name}"

mail(
# Set mail options - override reply_to if container has a contact email
mail_options = {
to: @user.email,
subject: subject
)
}

# Override reply_to with container's contact_email if present
mail_options[:reply_to] = @contact_email if @container.contact_email.present?

mail(mail_options)
end
end
8 changes: 6 additions & 2 deletions app/mailers/test_mailer.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
class TestMailer < ApplicationMailer
def test_email
def test_email(recipient_email = nil)
@message = 'This is a test email from LSA Evaluate to verify email configuration.'
@sender = Rails.application.credentials.dig(:sendgrid, :mailer_sender)
@reply_to = 'lsa-wads-rails-email-test@umich.edu'

mail(
to: 'test-t68vvtnfc@srv1.mail-tester.com',
to: recipient_email || 'lsa-wads-rails-email-test@umich.edu',
subject: 'Test Email from LSA Evaluate'
)
end
Expand Down
17 changes: 14 additions & 3 deletions app/views/test_mailer/test_email.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,19 @@
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Test Email from LSA Evaluate</h1>
<p>This is a test email to verify email authentication settings.</p>
<p>Sent at: <%= Time.current %></p>
<h1>Email Configuration Test</h1>

<p><%= @message %></p>

<p>This message confirms your email settings are working correctly.</p>

<h2>Email Configuration:</h2>
<ul>
<li><strong>From:</strong> <%= @sender %></li>
<li><strong>Reply-To:</strong> <%= @reply_to %></li>
</ul>

<p>This is a system-generated email. Please do not reply directly to this message.</p>
<p>If you need assistance, please contact <a href="mailto:<%= @reply_to %>"><%= @reply_to %></a>.</p>
</body>
</html>
13 changes: 13 additions & 0 deletions app/views/test_mailer/test_email.text.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Email Configuration Test
======================

<%= @message %>

This message confirms your email settings are working correctly.

Email Configuration:
- From: <%= @sender %>
- Reply-To: <%= @reply_to %>

This is a system-generated email. Please do not reply directly to this message.
If you need assistance, please contact <%= @reply_to %>.
2 changes: 1 addition & 1 deletion config/credentials.yml.enc

Large diffs are not rendered by default.

49 changes: 49 additions & 0 deletions lib/tasks/email.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
namespace :email do
# You can choose whether to queue the email through Sidekiq or send it directly:
# For direct delivery:
# bin/rails email:test[your@email.com]
#
# To queue through Sidekiq (add true as a second argument):
# bin/rails email:test[your@email.com,true]

desc 'Send a test email to verify configuration'
task :test, [ :email, :queue ] => :environment do |_t, args|
recipient = args[:email] || Rails.application.credentials.dig(:sendgrid, :mailer_sender)
queue_delivery = args[:queue]&.downcase == 'true'

if recipient.nil?
puts 'ERROR: No recipient email provided and no default contact email configured.'
puts 'Usage: rake email:test[recipient@example.com] or rake email:test[recipient@example.com,true] to queue via Sidekiq'
exit 1
end

puts "Sending test email to #{recipient}..."
begin
if queue_delivery
# For queued delivery, don't inspect the message before sending
puts 'Queuing email delivery through Sidekiq...'
TestMailer.test_email(recipient).deliver_later
puts 'Email successfully queued in Sidekiq!'
else
# For direct delivery, we can inspect the message
mail = TestMailer.test_email(recipient)

# Print message details before sending
puts 'Message details:'
puts " From: #{mail.from.first || 'Not set'}"
puts " Reply-To: #{mail.reply_to&.first || 'Not set'}"
puts " Subject: #{mail.subject || 'Not set'}"
puts 'Headers:'
mail.header.fields.each do |field|
puts " #{field.name}: #{field.value}" unless field.name =~ /content-/i
end

mail.deliver_now
puts 'Test email sent directly (bypassing Sidekiq)!'
end
rescue => e
puts "ERROR: Failed to send test email: #{e.message}"
puts e.backtrace.join("\n")
end
end
end