mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
handle plaintext and HTML emails in mbox importer
This commit is contained in:
parent
9207dee69a
commit
06a6ddc3ba
@ -97,15 +97,13 @@ module ImportScripts::Mbox
|
|||||||
|
|
||||||
def map_post(row)
|
def map_post(row)
|
||||||
user_id = user_id_from_imported_user_id(row['from_email']) || Discourse::SYSTEM_USER_ID
|
user_id = user_id_from_imported_user_id(row['from_email']) || Discourse::SYSTEM_USER_ID
|
||||||
body = CGI.escapeHTML(row['body'] || '')
|
attachment_html = map_attachments(row['raw_message'], user_id) if row['attachment_count'].positive?
|
||||||
body << map_attachments(row['raw_message'], user_id) if row['attachment_count'].positive?
|
|
||||||
body << Email::Receiver.elided_html(row['elided']) if row['elided'].present?
|
|
||||||
|
|
||||||
{
|
{
|
||||||
id: row['msg_id'],
|
id: row['msg_id'],
|
||||||
user_id: user_id,
|
user_id: user_id,
|
||||||
created_at: to_time(row['email_date']),
|
created_at: to_time(row['email_date']),
|
||||||
raw: body,
|
raw: format_raw(row['body'], attachment_html, row['elided'], row['format']),
|
||||||
raw_email: row['raw_message'],
|
raw_email: row['raw_message'],
|
||||||
via_email: true,
|
via_email: true,
|
||||||
cook_method: Post.cook_methods[:email],
|
cook_method: Post.cook_methods[:email],
|
||||||
@ -115,6 +113,28 @@ module ImportScripts::Mbox
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def format_raw(email_body, attachment_html, elided, format)
|
||||||
|
email_body ||= ''
|
||||||
|
|
||||||
|
case format
|
||||||
|
when Email::Receiver::formats[:markdown]
|
||||||
|
body = email_body
|
||||||
|
body << attachment_html if attachment_html.present?
|
||||||
|
body << elided if elided.present?
|
||||||
|
when Email::Receiver::formats[:plaintext]
|
||||||
|
body = %|[plaintext]\n#{escape_tags(email_body)}\n[/plaintext]|
|
||||||
|
body << %|\n[attachments]\n#{escape_tags(attachment_html)}\n[/attachments]| if attachment_html.present?
|
||||||
|
body << %|\n[elided]\n#{escape_tags(elided)}\n[/elided]| if elided.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
body
|
||||||
|
end
|
||||||
|
|
||||||
|
def escape_tags(text)
|
||||||
|
text.gsub!(/^(\[\/?(?:plaintext|attachments|elided)\])$/, ' \1')
|
||||||
|
text
|
||||||
|
end
|
||||||
|
|
||||||
def map_first_post(row)
|
def map_first_post(row)
|
||||||
mapped = map_post(row)
|
mapped = map_post(row)
|
||||||
mapped[:category] = category_id_from_imported_category_id(row['category'])
|
mapped[:category] = category_id_from_imported_category_id(row['category'])
|
||||||
|
@ -34,10 +34,10 @@ module ImportScripts::Mbox
|
|||||||
def insert_email(email)
|
def insert_email(email)
|
||||||
@db.execute(<<-SQL, email)
|
@db.execute(<<-SQL, email)
|
||||||
INSERT OR REPLACE INTO email (msg_id, from_email, from_name, subject,
|
INSERT OR REPLACE INTO email (msg_id, from_email, from_name, subject,
|
||||||
email_date, raw_message, body, elided, attachment_count, charset,
|
email_date, raw_message, body, elided, format, attachment_count, charset,
|
||||||
category, filename, first_line_number, last_line_number)
|
category, filename, first_line_number, last_line_number)
|
||||||
VALUES (:msg_id, :from_email, :from_name, :subject,
|
VALUES (:msg_id, :from_email, :from_name, :subject,
|
||||||
:email_date, :raw_message, :body, :elided, :attachment_count, :charset,
|
:email_date, :raw_message, :body, :elided, :format, :attachment_count, :charset,
|
||||||
:category, :filename, :first_line_number, :last_line_number)
|
:category, :filename, :first_line_number, :last_line_number)
|
||||||
SQL
|
SQL
|
||||||
end
|
end
|
||||||
@ -148,7 +148,7 @@ module ImportScripts::Mbox
|
|||||||
def fetch_messages(last_row_id)
|
def fetch_messages(last_row_id)
|
||||||
rows = @db.execute(<<-SQL, last_row_id)
|
rows = @db.execute(<<-SQL, last_row_id)
|
||||||
SELECT o.ROWID, e.msg_id, from_email, subject, email_date, in_reply_to,
|
SELECT o.ROWID, e.msg_id, from_email, subject, email_date, in_reply_to,
|
||||||
raw_message, body, elided, attachment_count, category
|
raw_message, body, elided, format, attachment_count, category
|
||||||
FROM email e
|
FROM email e
|
||||||
JOIN email_order o USING (msg_id)
|
JOIN email_order o USING (msg_id)
|
||||||
WHERE email_date IS NOT NULL AND
|
WHERE email_date IS NOT NULL AND
|
||||||
@ -204,6 +204,7 @@ module ImportScripts::Mbox
|
|||||||
raw_message TEXT,
|
raw_message TEXT,
|
||||||
body TEXT,
|
body TEXT,
|
||||||
elided TEXT,
|
elided TEXT,
|
||||||
|
format INTEGER,
|
||||||
attachment_count INTEGER NOT NULL DEFAULT 0,
|
attachment_count INTEGER NOT NULL DEFAULT 0,
|
||||||
charset TEXT,
|
charset TEXT,
|
||||||
category TEXT NOT NULL,
|
category TEXT NOT NULL,
|
||||||
|
@ -58,7 +58,7 @@ module ImportScripts::Mbox
|
|||||||
msg_id = receiver.message_id
|
msg_id = receiver.message_id
|
||||||
parsed_email = receiver.mail
|
parsed_email = receiver.mail
|
||||||
from_email, from_display_name = receiver.parse_from_field(parsed_email)
|
from_email, from_display_name = receiver.parse_from_field(parsed_email)
|
||||||
body, elided = receiver.select_body
|
body, elided, format = receiver.select_body
|
||||||
reply_message_ids = extract_reply_message_ids(parsed_email)
|
reply_message_ids = extract_reply_message_ids(parsed_email)
|
||||||
|
|
||||||
email = {
|
email = {
|
||||||
@ -70,6 +70,7 @@ module ImportScripts::Mbox
|
|||||||
raw_message: receiver.raw_email,
|
raw_message: receiver.raw_email,
|
||||||
body: body,
|
body: body,
|
||||||
elided: elided,
|
elided: elided,
|
||||||
|
format: format,
|
||||||
attachment_count: receiver.attachments.count,
|
attachment_count: receiver.attachments.count,
|
||||||
charset: parsed_email.charset&.downcase,
|
charset: parsed_email.charset&.downcase,
|
||||||
category: category_name,
|
category: category_name,
|
||||||
|
Loading…
Reference in New Issue
Block a user