Menyimpan email sebagai file dalam mutt?

28

Ketika saya menekan Sdi mutt, ia menyimpan email ke format folder mail ( cur/ tmp/ new/), tapi saya ingin satu file disimpan, sama seperti bagaimana lampiran disimpan.

Apakah itu dapat dikonfigurasi?

bunga aster
sumber

Jawaban:

23

Pesan aktual juga muncul sebagai lampiran, sehingga Anda dapat menyimpannya dari daftar lampiran. Baik dari indeks atau pesan itu sendiri, tekan vuntuk membuka lampiran dan suntuk menyimpan

Michael Mrozek
sumber
Hanya sebuah catatan: jika pesan email Anda berisi lampiran, maka hanya menyimpan entri pertama dari daftar lampiran akan menyimpan pesan - tetapi tanpa lampiran yang disertakan di dalamnya.
sdaau
3
Catatan lain: ini tidak menyimpan header apa pun, termasuk pengirim, penerima, dan subjek.
Sparhawk
31

The sperintah menyimpan ke kotak surat, yang bagi Anda adalah dalam format maildir. Sayangnya, tidak ada perintah save-to-file, mungkin karena dalam format mbox historis, kotak surat yang berisi satu surat hanyalah file yang berisi surat itu.

Pesan muttpipa perintah (pintasan default |) dapat digunakan untuk ini. Ini membuka baris perintah dan Anda menulis cat > DESIRED-FILE-PATH.

Opsi "decode pipa" mengontrol apa yang terjadi pada tajuk dan bagian pantomim ketika Anda menyimpan pesan dengan cara ini.

Seseorang mungkin bisa menulis makro untuk fungsi ini.

Kai von Fintel
sumber
Keren, ini bisa menghemat tajuk juga, tapi untuk sekarang, aku akan menggunakan cara Michael, terima kasih!
daisy
1
Ini berfungsi dengan baik dan menyediakan cara yang efisien untuk menyimpan 50+ email (menggunakan penandaan pencocokan pola) ke file. Saya harus menggali sedikit untuk menemukan bahwa dengan menambahkan set pipe_decode=yeske muttrc saya adalah apa yang ditulis oleh Kai von Fintel.
Screenack
juga, ini juga menyimpan lampiran dalam file email yang diekspor.
sdaau
ini baik-baik saja, tetapi saya melihat jeda baris yang belum diproses dengan =melakukan ini.
Jack Wasey
Luar biasa. Ini bekerja baik untuk saya. Saya hanya ingin mengekstrak 20+ email dari Maildir yang sudah usang. Tepuk tangan!
prageeth
10

Jika Anda touchfile dan kemudian mencoba untuk menyimpan atau menyalin pesan ke sana mutt akan menggunakannya sebagai mbox.

Anda juga mungkin ingin menggunakan salinan alih-alih menyimpan. Mutt mengasumsikan bahwa surat hanya akan ada dalam satu salinan dan menyimpan pesan ke kotak surat lain akan menghapusnya dari yang pertama, sementara menyalin akan melakukan salinan yang tepat.

Kyrias
sumber
1
Saya perlu mendapatkan pesan dengan header lengkap untuk menempelkannya ke skrip tes filter, dan ini berfungsi dengan baik.
Soren Bjornstad
2

Kai von Fintel 's jawaban bekerja sempurna, tapi aku hanya berpikir saya akan berbagi makro untuk merampingkan proses ini.

Pertama, di muttrc:

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

Ini mem-pipe email lengkap (termasuk header dan lampiran) ke skrip berikut. Buat file yang dapat dieksekusi di ~/.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"

Script ini menyimpan file ke argumen pertama (yaitu dalam muttrccontoh di atas, email akan disimpan ke /tmp). Format nama file adalah YYMMDD SUBJECT.eml. Hal ini juga mengkonversi /ke untuk mencegah menciptakan subdirektori.

Sparhawk
sumber
Bukankah lebih mudah digunakan formaildalam skrip?
0andriy
@ 0danriy Saya tidak kenal formail, jadi saya sudah membaca. Namun, saya tidak sepenuhnya yakin bagian mana dari skrip saya yang Anda maksud? Menggunakan formailuntuk mengekstrak subjek dan tanggal? Jika demikian, mungkin ide yang bagus. Saya mendorong Anda untuk menulis jawaban; Saya pasti akan mengangkatnya.
Sparhawk
0

Saya telah mencoba semua jawaban yang disarankan tetapi tidak bisa mendapatkan email mentah, multi-bagian (teks / polos + teks / html) untuk disimpan ke file, termasuk tajuk dan semuanya. Saya membutuhkan ini untuk memberi makan filter spam saya dengan email untuk mengajarkannya, bahwa email tertentu adalah spam atau bukan ...

Solusi yang saya buat adalah dengan menekan e(yaitu "edit pesan") pada pesan terbuka, yang membuka pesan mentah di editor pilihan Anda. Raw di sini berarti, bahwa Anda mendapatkan pesan persis seperti saat tiba di mutt, jadi Anda memiliki semua header dan semua byte yang menyusun pesan.

Setelah memukul e, saya hanya menulis buffer (saya mengatur editor ke vim ) ke file dengan :w <path_to_file>/<file_name>dan hanya itu.

PS: Saya ingin menambahkan ini sebagai komentar tetapi Anda perlu tingkat reputasi tertentu untuk melakukan ini. Juga, saya tahu pertanyaannya sudah sangat lama tetapi karena neomutt masih digunakan oleh banyak orang, saya pikir ini mungkin membantu seseorang.

Pembaruan: Saya mengabaikan pipe-decodeopsi yang dibicarakan Kai. Dengan opsi yang diatur dengan benar itu akan berfungsi |juga. Masih solusi saya bekerja, juga ;-)

m4110c
sumber