Yanıtlar:
Gerçek mesaj bir ek olarak da gösterilir, böylece ek listesinden kaydedebilirsiniz. Dizinden veya mesajın kendisinden, vekleri açmak ve skaydetmek için
s
Komut sizin için Maildir formatında bir posta kutusu, kaydeder. Ne yazık ki, dosyaya kaydetme komutu yoktur, belki de tarihsel mbox biçiminde, tek bir posta içeren bir posta kutusu yalnızca o postayı içeren bir dosyadır.
Bunun için mutt
komut satırı mesajı (varsayılan kısayol |
) kullanılabilir. Bir komut satırı açar ve siz yazıyorsunuz cat > DESIRED-FILE-PATH
.
"Pipe-decode" seçeneği, bu şekilde bir mesaj kaydettiğinizde başlıkları ve parçaları kesmek için ne olduğunu kontrol eder.
Biri muhtemelen bu işlevsellik için bir makro yazabilir.
set pipe_decode=yes
Muttrc ekleyerek Kai von Fintel'in yazdığı şey olduğunu bulmak için biraz kazmak zorunda kaldım .
=
bunu yapıyorum.
Eğer touch
ahmak bir mbox olarak kullanacak bir dosya ve ardından kaydetmek için denemek veya bir mesaj kopyalayın.
Ayrıca kaydetmek yerine kopya kullanmak isteyebilirsiniz. Mutt, bir postanın yalnızca bir kopyada bulunması gerektiğini ve bir iletinin başka bir posta kutusuna kaydedilmesinin ilk postadan silineceğini, kopyalamanın uygun bir kopya yapılacağını varsayar.
Kai von Fintel 'ın cevabı mükemmel çalışıyor, ama sadece bu süreci hızlandırmaya yönelik bir makro paylaşmak istedim.
İlk olarak, içinde muttrc
:
macro index,pager S "| ~/.local/bin/file_email /tmp<enter>"
Bu, tam e-postayı (başlıklar ve ekler dahil) aşağıdaki komut dosyasına yönlendirir. Adresinde çalıştırılabilir bir dosya oluşturun ~/.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"
Bu komut dosyası dosyayı ilk argümana kaydeder ( muttrc
örneğin yukarıdaki örnekte e-postaya kaydedecektir /tmp
). Dosya adının biçimi YYMMDD SUBJECT.eml
. Ayrıca, alt dizinlerin oluşturulmasını önlemek /
için dönüştürür ∕
.
formail
Senaryoda kullanmak daha kolay olmaz mıydı ?
formail
, bu yüzden bir okuma vardı. Ancak, senaryomun hangi bölümüne başvurduğunuzdan emin değilim. Kullanılması formail
özü özne ve bugüne kadar? Eğer öyleyse, muhtemelen güzel bir fikir. Sizden bir cevap yazmanızı tavsiye ederim; Kesinlikle oyladım.
Önerilen tüm yanıtları denedim ancak başlıkları ve her şey dahil olmak üzere bir dosyaya kaydedilecek ham, çok parçalı (metin / düz + metin / html) e-postayı alamadım. Bunun için spam filtresini e-posta ile beslemem gerekti, belirli bir postanın spam olup olmadığını ...
Karşılaştığım çözüm ham mesajıe
açan açık mesajdaki (yani "mesajı düzenle") basılıyor. editörünüzdeki . Burada işlenmemiş ifadesi, mesajı tam anlamıyla geldiği gibi aldığınız anlamına gelir, böylece mesajı içeren tüm başlıkları ve tüm baytları alırsınız.
Vurduktan sonra e
tamponu ( vim editörünü vim olarak ayarladım ) bir dosyaya yazdım :w <path_to_file>/<file_name>
ve hepsi bu.
Not: Bunu yorum olarak eklerdim ama bunu yapmak için belirli bir itibar seviyesine ihtiyacınız var. Ayrıca, sorunun çok eski olduğunu biliyorum ama neomutt hala birçok kişi tarafından kullanıldığından, bunun birisine yardımcı olabileceğini düşündüm.
Güncelleme:pipe-decode
Kai'nin bahsettiği seçeneği göz ardı ettim . Bu seçenek doğru ayarlanmışsa, üzerinden çalışacaktı|
. Yine de benim çözümüm de çalışıyor ;-)