mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: add setting to show content of forwarded emails in topics (#7935)
This commit is contained in:
@@ -660,7 +660,7 @@ module Email
|
||||
end
|
||||
|
||||
def process_destination(destination, user, body, elided, hidden_reason_id)
|
||||
return if SiteSetting.enable_forwarded_emails &&
|
||||
return if SiteSetting.forwarded_emails_behaviour != "hide" &&
|
||||
has_been_forwarded? &&
|
||||
process_forwarded_email(destination, user)
|
||||
|
||||
@@ -800,27 +800,30 @@ module Email
|
||||
|
||||
def process_forwarded_email(destination, user)
|
||||
user ||= stage_from_user
|
||||
embedded = Mail.new(embedded_email_raw)
|
||||
email, display_name = parse_from_field(embedded)
|
||||
|
||||
return false if email.blank? || !email["@"]
|
||||
|
||||
raw = try_to_encode(embedded.decoded, "UTF-8").presence || embedded.to_s
|
||||
title = embedded.subject.presence || subject
|
||||
case SiteSetting.forwarded_emails_behaviour
|
||||
when "create_replies"
|
||||
forwarded_email_create_replies(destination, user)
|
||||
when "quote"
|
||||
forwarded_email_quote_forwarded(destination, user)
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def forwarded_email_create_topic(destination: , user: , raw: , title: , date: nil, embedded_user: nil)
|
||||
case destination[:type]
|
||||
when :group
|
||||
group = destination[:obj]
|
||||
embedded_user = find_or_create_user(email, display_name)
|
||||
post = create_topic(user: embedded_user,
|
||||
raw: raw,
|
||||
title: title,
|
||||
archetype: Archetype.private_message,
|
||||
target_usernames: [user.username],
|
||||
target_group_names: [group.name],
|
||||
is_group_message: true,
|
||||
skip_validations: true,
|
||||
created_at: embedded.date)
|
||||
topic_user = embedded_user&.call || user
|
||||
create_topic(user: topic_user,
|
||||
raw: raw,
|
||||
title: title,
|
||||
archetype: Archetype.private_message,
|
||||
target_usernames: [user.username],
|
||||
target_group_names: [group.name],
|
||||
is_group_message: true,
|
||||
skip_validations: true,
|
||||
created_at: date)
|
||||
|
||||
when :category
|
||||
category = destination[:obj]
|
||||
@@ -828,16 +831,31 @@ module Email
|
||||
return false if user.staged? && !category.email_in_allow_strangers
|
||||
return false if !user.has_trust_level?(SiteSetting.email_in_min_trust)
|
||||
|
||||
embedded_user = find_or_create_user(email, display_name)
|
||||
post = create_topic(user: embedded_user,
|
||||
raw: raw,
|
||||
title: title,
|
||||
category: category.id,
|
||||
skip_validations: embedded_user.staged?,
|
||||
created_at: embedded.date)
|
||||
topic_user = embedded_user&.call || user
|
||||
create_topic(user: topic_user,
|
||||
raw: raw,
|
||||
title: title,
|
||||
category: category.id,
|
||||
skip_validations: topic_user.staged?,
|
||||
created_at: date)
|
||||
else
|
||||
return false
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def forwarded_email_create_replies(destination, user)
|
||||
embedded = Mail.new(embedded_email_raw)
|
||||
email, display_name = parse_from_field(embedded)
|
||||
|
||||
return false if email.blank? || !email["@"]
|
||||
|
||||
post = forwarded_email_create_topic(destination: destination,
|
||||
user: user,
|
||||
raw: try_to_encode(embedded.decoded, "UTF-8").presence || embedded.to_s,
|
||||
title: embedded.subject.presence || subject,
|
||||
date: embedded.date,
|
||||
embedded_user: lambda { find_or_create_user(email, display_name) })
|
||||
return false unless post
|
||||
|
||||
if post&.topic
|
||||
# mark post as seen for the forwarder
|
||||
@@ -846,7 +864,7 @@ module Email
|
||||
# create reply when available
|
||||
if @before_embedded.present?
|
||||
post_type = Post.types[:regular]
|
||||
post_type = Post.types[:whisper] if post.topic.private_message? && group.usernames[user.username]
|
||||
post_type = Post.types[:whisper] if post.topic.private_message? && destination[:obj].usernames[user.username]
|
||||
|
||||
create_reply(user: user,
|
||||
raw: @before_embedded,
|
||||
@@ -860,6 +878,19 @@ module Email
|
||||
true
|
||||
end
|
||||
|
||||
def forwarded_email_quote_forwarded(destination, user)
|
||||
embedded = embedded_email_raw
|
||||
raw = <<~EOF
|
||||
#{@before_embedded}
|
||||
|
||||
[quote]
|
||||
#{PlainTextToMarkdown.new(embedded).to_markdown}
|
||||
[/quote]
|
||||
EOF
|
||||
|
||||
return true if forwarded_email_create_topic(destination: destination, user: user, raw: raw, title: subject)
|
||||
end
|
||||
|
||||
def self.reply_by_email_address_regex(extract_reply_key = true, include_verp = false)
|
||||
reply_addresses = [SiteSetting.reply_by_email_address]
|
||||
reply_addresses << (SiteSetting.alternative_reply_by_email_addresses.presence || "").split("|")
|
||||
|
||||
Reference in New Issue
Block a user