Сохранение электронной почты в виде файла в Mutt?

28

Когда я Sнажимаю в Mutt, он сохраняет почту в формате почтовой папки ( cur/ tmp/ new/), но я хочу, чтобы был сохранен один файл, как и вложения.

Это настраивается?

маргаритка
источник

Ответы:

23

Фактическое сообщение также отображается как вложение, так что вы можете сохранить его из списка вложений. В индексе или в самом сообщении нажмите, vчтобы открыть вложения и sсохранить

Михаил Мрозек
источник
Просто примечание: если ваше электронное сообщение содержит вложения, то сохранение только первой записи из списка вложений сохранит сообщение - но без вложений, включенных в него.
Sdaau
3
Еще одно примечание: это не сохраняет заголовки, включая отправителя, получателя и тему.
Sparhawk
31

Команда sсохраняет в почтовый ящик, который для вас в формате maildir. К сожалению, нет команды сохранения в файл, возможно, потому что в историческом формате mbox почтовый ящик, содержащий одну почту, является просто файлом, содержащим эту почту.

Для этого можно использовать muttкоманду pipe-message (ярлык по умолчанию |). Он открывает командную строку и ты пишешь cat > DESIRED-FILE-PATH.

Опция pipe-decode управляет тем, что происходит с заголовками и пантомимами, когда вы сохраняете сообщение таким способом.

Возможно, можно написать макрос для этой функции.

Кай фон Финтел
источник
Круто, это также может спасти заголовки, но сейчас я бы использовал путь Майкла, спасибо!
маргаритка
1
Это хорошо работает и обеспечивает эффективный способ сохранения более 50 электронных писем (с помощью сопоставления с образцом) в файл. Мне пришлось немного покопаться, чтобы найти, что, добавляя set pipe_decode=yesв свой muttrc, именно об этом писал Кай фон Финтель.
Screenack
также, это сохраняет вложения в экспортированном файле электронной почты, а также.
Сдау
это нормально, но я вижу необработанные разрывы строк при =этом.
Джек Уэйси
Потрясающе. Это отлично сработало для меня. Я просто хотел извлечь около 20+ писем из устаревшего Maildir. Ура!
Пражет
10

Если вы touchфайл, а затем попытаетесь сохранить или скопировать в него сообщение, Mutt будет использовать его как mbox.

Также вы можете использовать копию вместо сохранения. Матт предполагает, что письмо должно существовать только в одной копии, а сохранение сообщения в другом почтовом ящике удалит его из первого, а при копировании будет сделана правильная копия.

kyrias
источник
1
Мне нужно было получить сообщение с полными заголовками, чтобы вставить его в скрипт теста фильтра, и это сработало отлично.
Сорен Бьорнстад
2

Кай фон Fintel «s ответ работает отлично, но я просто подумал , что я разделю макрос рационализировать этот процесс.

Во-первых, в muttrc:

macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"

Это передает полную электронную почту (включая заголовки и вложения) к следующему сценарию. Создайте исполняемый файл в ~/.local/bin/file_email.

#!/usr/bin/env bash
# Save piped email to "$1/YYMMDD SUBJECT.eml"

# Don't overwrite existing file
set -o noclobber

message=$(cat)

mail_date=$(<<<"$message" grep -oPm 1 '^Date: ?\K.*')
formatted_date=$(date -d"$mail_date" +%y%m%d)
# Get the first line of the subject, and change / to ∕ so it's not a subdirectory
subject=$(<<<"$message" grep -oPm 1 '^Subject: ?\K.*' | sed 's,/,∕,g')

if [[ $formatted_date == '' ]]; then
  echo Error: no date parsed
  exit 1
elif [[ $subject == '' ]]; then
  echo Warning: no subject found
fi

echo "${message}" > "$1/$formatted_date $subject.eml" && echo Email saved to "$1/$formatted_date $subject.eml"

Этот скрипт сохраняет файл с первым аргументом (т.е. в muttrcприведенном выше примере электронная почта будет сохранена в /tmp). Формат имени файла YYMMDD SUBJECT.eml. Он также конвертируется /в, чтобы предотвратить создание подкаталогов.

Sparhawk
источник
Не будет проще использовать formailв сценарии?
0
@ 0andriy Я не знаком formail, поэтому прочитал. Однако я не совсем уверен, на какую часть моего сценария вы ссылались? Используете formailдля извлечения темы и даты? Если это так, вероятно, хорошая идея. Я призываю вас написать ответ; Я определенно одобряю это.
Ястреб
0

Я перепробовал все предложенные ответы, но не смог получить необработанное, составное (text / plain + text / html) электронное письмо для сохранения в файл, включая его заголовки и все остальное. Мне нужно было это, чтобы заполнить мой спам-фильтр электронной почтой, чтобы научить его, что конкретная почта - это спам или нет ...

Решение, которое я придумал, - это нажать e(т.е. «отредактировать сообщение») на открытое сообщение, которое открывает необработанное сообщение в выбранном вами редакторе. Необработанный здесь означает, что вы получаете сообщение в точности так, как оно поступило в Mutt, поэтому у вас есть все заголовки и все байты, которые составляют сообщение.

После нажатия eя просто записываю буфер (я устанавливаю редактор в vim ) в файл с помощью :w <path_to_file>/<file_name>и все.

PS: Я бы добавил это как комментарий, но для этого нужен определенный уровень репутации. Кроме того, я знаю, что вопрос очень старый, но поскольку neomutt все еще используется многими людьми, я подумал, что это может кому-то помочь.

Обновление: я пропустил pipe-decodeвариант, о котором говорил Кай. Если эта опция установлена ​​правильно, она бы тоже работала |. Тем не менее, мое решение тоже работает ;-)

m4110c
источник