Вы смотрели в базу данных? Интуитивно кажется, что по какой-то причине поле электронной почты там создаётся некорректно, и поэтому его невозможно прочитать.
См. пункт 2.3 в исходном сообщении для проверки индексной базы данных.
Вы смотрели в базу данных? Интуитивно кажется, что по какой-то причине поле электронной почты там создаётся некорректно, и поэтому его невозможно прочитать.
См. пункт 2.3 в исходном сообщении для проверки индексной базы данных.
Список Mailman 2, который я рассматриваю для импорта в Discourse, в течение части своего существования имел настройку from_is_list равной Munge From, так что заголовок From: выглядел так:
From: Listname <listname-bounces@listdomain.com> On Behalf Of [Имя оригинального отправителя]
вместо
From: [Имя оригинального отправителя] <username@example.com>
Это заставило меня подумать, что импортер будет воспринимать каждое такое сообщение как исходящее от одного и того же пользователя (с адресом электронной почты listname-bounces@listdomain.com)… НО…
Начальная строка, обозначающая начало нового письма в файле mbox, всё ещё начинается с:
From username@example.com [Дата время группа]
(и архивы Hyperkitty также показывают адрес электронной почты оригинального отправителя в обычном виде).
Так что мой вопрос — берет ли скрипт импорта адрес отправителя из заголовка From: или из строки From ? Спасибо.
Я кратко обсуждал это в предыдущей теме: Working on a mailman2 to discourse migration script - #10 by dachary
Используется заголовок From:.
Спасибо за быстрый ответ! Насколько сложно это изменить? Не обязательно официально — хотя это могло бы помочь другим, — но просто чтобы я мог изменить скрипт перед его запуском. Я пока не знаю Ruby, но если нужно просто заменить двоеточие на пробел…
Это не простое изменение, но оно выполнимо. Вам не обязательно реализовывать это в скрипте импорта. Если вы знаете другой язык скриптов, я уверен, что обновление заголовков From: в файлах mbox перед запуском импорта не составит большого труда…
Но, конечно, вы можете исправить это в скрипте импорта. PR приветствуется!
Хорошей отправной точкой для исправления заголовка должен стать метод each_mail…
Спасибо. Похоже, что именно это сейчас определяет результат, исходя из строк 69–70 файла indexer.rb:
parsed_email = receiver.mail
from_email, from_display_name = receiver.parse_from_field(parsed_email)
Возможно ли в этот момент получить первую строку письма в формате mbox (то есть строку вида «From [адрес электронной почты] [дата и время]») из переменной parsed_email и извлечь оттуда адрес электронной почты?
Нет, эта строка фильтруется при разделении mbox на отдельные сообщения. Вам нужно сохранить это значение в методе each_mail, чтобы использовать его позже.
Мне было интересно попробовать это сделать, прежде чем я заметил, что Mailman хранит письма в формате mbox в их первоначальном, неизменном виде, так что строка «From:» содержит тот же адрес отправителя, что и строка «From » во всех случаях, даже когда письмо отправлено «From: listname-bounces@listname.domain.com»). ![]()
У меня не было установленной среды разработки Discourse или даже Ruby, но я смог продвинуться с помощью https://rubular.com/, https://replit.com/languages/ruby (и DuckDuckGo). Если вы готовы взглянуть на это, буду благодарен, если вы сообщите, сработало бы это (или почти сработало), если бы это потребовалось…
def each_mail(filename)
raw_message = +''
first_line_number = 1
last_line_number = 0
each_line(filename) do |line|
if line.scrub =~ @split_regex
if last_line_number > 0
# Мы перешли к началу СЛЕДУЮЩЕГО письма
yield raw_message, first_line_number, last_line_number
raw_message = +''
first_line_number = last_line_number + 1
else
# Мы перешли к началу ЭТОГО письма, поэтому получаем адрес электронной почты
new_email = line.match(/^From (\S+@\S+).*/).captures
end
else
raw_message << line
end
last_line_number += 1
end
# Получаем старый адрес электронной почты (строка «From:»)
old_email = raw_message.match(/^From: .*</(\S+@\S+)>/).captures
# Заменяем адрес «From » в строке «From:»
raw_message = raw_message.sub(old_email, new_email)
yield raw_message, first_line_number, last_line_number if raw_message.present?
end
Что ж, назовём это почти… ![]()
После успешного импорта почтовых архивов (mbox) в содержимом сообщений будут отображаться адреса электронной почты, которые ранее были скрыты (обфусцированы) серверами Gmane или mailman2. Это позволяет ботам, собирающим адреса, извлекать их, и я ищу способ избежать этого.
Заранее спасибо за вашу помощь!
Это взаимоисключающий выбор?
Когда я пытался импортировать свой ящик MM2 mbox в MM3, примерно четверть писем оказались «сиротами» (ответы ошибочно воспринимались как начало новых веток), потому что у них не было нужных заголовков. Pipermail в MM2 может структурировать архив по теме (если нет Message-ID или как там называется другой заголовок — не помню), но, насколько я помню, Postorius в MM3 игнорирует тему. Поэтому в идеале ваш скрипт должен делать то же самое, что и Pipermail, и в большинстве случаев правильно обрабатывать мой список ![]()
Также — если письма импортируются вперемешку, как указано выше, есть ли в Discourse способ это исправить? Или единственный выход — использовать index_only и либо добавить заголовки в файл mbox, либо пересобрать index.db, как предложено в цитируемом ниже посте?
Спасибо.
Да, это так.
Не совсем. Ну, можно перемещать сообщения, но это утомительно, даже с автоматизацией.
Думаю, это лучший способ решить вашу проблему, если только вы не чувствуете себя комфортно, работая над скриптом импорта и добавляя какой-то гибридный режим, который группирует по Message-ID и теме, если первое отсутствует.
Импорт из Google Groups в настоящее время не работает, так как Google изменил интерфейс и убрал схему AJAX-сканирования, которую они ещё в 2015 году объявили устаревшей.
Удалось ли кому-нибудь использовать Google Takeout для экспорта файлов mbox?
Здравствуйте,
Как мы можем использовать это для импорта групп Google в облачную версию Discourse, а не в локальную?
Если вы оплачиваете бизнес-хостинг на год, они сделают это бесплатно. В противном случае вы выполняете это на собственном сервере, загружаете резервную копию на свой экземпляр и пишете в службу поддержки, чтобы попросить их восстановить данные.
Скрипт для группы Google может быть капризным в настройке аутентификации. В прошлый раз, когда я его использовал, мне пришлось поиграть с конечной точкой входа в систему, чтобы заставить его работать.
Вы помните изменение, которое вы внесли, чтобы вход в систему заработал? Я получаю следующую ошибку, хотя использовал то же расширение, что указано в начальных шагах для создания файла с cookie. Кстати, я работаю с частной группой доменов.
Logging in...
2021-10-31 12:54:41 WARN Selenium [DEPRECATION] [:browser_options] :options as a parameter for driver initialization is deprecated. Use :capabilities with an Array of value capabilities/options if necessary instead.
Traceback (most recent call last):
31: from script/import_scripts/google_groups.rb:293:in `<main>'
30: from script/import_scripts/google_groups.rb:237:in `crawl'
29: from script/import_scripts/google_groups.rb:181:in `login'
28: from script/import_scripts/google_groups.rb:196:in `add_cookies'
27: from script/import_scripts/google_groups.rb:196:in `each'
26: from script/import_scripts/google_groups.rb:200:in `block in add_cookies'
25: from /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/common/manager.rb:61:in `add_cookie'
24: from /usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-4.0.3/lib/selenium/webdriver/remote/bridge.rb:349:in `add_cookie'
#0 0x557491640f93 <unknown>: invalid cookie domain: Cookie 'domain' mismatch (Selenium::WebDriver::Error::InvalidCookieDomainError)
Извините, но исправление входа недостаточно.
Исправила ли более недавняя редизайн что-либо?
Нет, если только они не вернули эту функцию за последние 25 дней. Я не думаю, что они это сделают, поэтому парсеру потребуется полная переработка.