Make sure email replies to diary comments come from the right user

This commit is contained in:
Tom Hughes 2016-11-29 19:30:23 +00:00
parent fe0f4543c1
commit de6c33814b
2 changed files with 18 additions and 12 deletions

View file

@ -107,7 +107,7 @@ class Notifier < ActionMailer::Base
:display_name => comment.user.display_name,
:title => "Re: #{comment.diary_entry.title}")
mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest),
mail :from => from_address(comment.user.display_name, "c", comment.id, comment.digest, recipient.id),
:to => recipient.email,
:subject => I18n.t("notifier.diary_comment_notification.subject", :user => comment.user.display_name)
end
@ -180,9 +180,13 @@ class Notifier < ActionMailer::Base
end
end
def from_address(name, type, id, digest)
def from_address(name, type, id, digest, user_id = nil)
if Object.const_defined?(:MESSAGES_DOMAIN) && domain = MESSAGES_DOMAIN
if user_id
"#{name} <#{type}-#{id}-#{user_id}-#{digest[0, 6]}@#{domain}>"
else
"#{name} <#{type}-#{id}-#{digest[0, 6]}@#{domain}>"
end
else
EMAIL_FROM
end

View file

@ -2,23 +2,25 @@
require File.dirname(__FILE__) + "/../config/environment"
exit 0 unless recipient = ARGV[0].match(/^([cm])-(\d+)-(.*)$/)
if recipient[1] == "c"
comment = DiaryComment.find(recipient[2])
if recipient = ARGV[0].match(/^c-(\d+)-(\d+)-(.*)$/)
comment = DiaryComment.find(recipient[1])
digest = comment.digest
date = diary_comment.created_at
from = comment.diary_entry.user
date = comment.created_at
from = User.find(recipient[2])
to = comment.user
else
message = Message.find(recipient[2])
token = recipient[3]
elsif recipient = ARGV[0].match(/^m-(\d+)-(.*)$/)
message = Message.find(recipient[1])
digest = message.digest
date = message.sent_on
from = message.recipient
to = message.sender
token = recipient[2]
else
exit 0
end
exit 0 unless recipient[3] == digest[0, 6]
exit 0 unless token == digest[0, 6]
exit 0 if date < 1.month.ago
message.update_attribute(:message_read, true) if message