E-postayı dosya olarak kaydetme?


28

SSıkıştırma tuşuna bastığımda, postaları bir posta klasörü formatına ( cur/ tmp/ new/) kaydeder , ancak eklerin nasıl kaydedildiği gibi tek bir dosyanın kaydedilmesini istiyorum.

Bu yapılandırılabilir mi?

Yanıtlar:


23

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


Sadece bir not: e-posta mesajınız ek içeriyorsa, o zaman ekler listesinden yalnızca ilk girişi kaydetmek mesajı kaydedecektir - ancak içeride bulunan ekler olmadan.
sdaau

3
Başka bir not: bu, gönderen, alıcı ve konu dahil herhangi bir başlığı kaydetmez.
Sparhawk

31

sKomut 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 muttkomut 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.


Güzel, bu başlıkları da koruyabilir, ama şimdilik Michael'ın yolunu kullanırdım, teşekkürler!
papatya

1
Bu iyi çalışır ve dosyaya 50'den fazla e-posta (desen eşleme etiketlemesi kullanarak) kaydetmenin etkin bir yolunu sağlar. set pipe_decode=yesMuttrc ekleyerek Kai von Fintel'in yazdığı şey olduğunu bulmak için biraz kazmak zorunda kaldım .
Senaryo

Ayrıca, bu ekleri dışa aktarılan e-posta dosyasına da kaydeder.
sdaau

Bu iyi, ancak işlenmemiş satır sonları ile =bunu yapıyorum.
Jack Wasey

Muhteşem. Bu benim için harika çalıştı. Eski bir Maildir'den 20'den fazla e-posta almak istedim. Şerefe!
fethet

10

Eğer touchahmak 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.


1
Bir filtre test komut dosyasına yapıştırmak için tam başlıkları içeren iletiyi almam gerekiyordu ve bu mükemmel bir şekilde çalışıyordu.
Soren Bjornstad

2

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 .


formailSenaryoda kullanmak daha kolay olmaz mıydı ?
0 ve

@ 0andriy Ben aşina değilim 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.
Sparhawk

0

Ö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 etamponu ( 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 ;-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.