เมื่อฉันกดSmutt มันจะบันทึกเมลเป็นรูปแบบโฟลเดอร์เมล ( cur/ tmp/ new/) แต่ฉันต้องการบันทึกไฟล์เดียวเช่นเดียวกับวิธีบันทึกสิ่งที่แนบมา
สามารถกำหนดค่าได้หรือไม่?
เมื่อฉันกดSmutt มันจะบันทึกเมลเป็นรูปแบบโฟลเดอร์เมล ( cur/ tmp/ new/) แต่ฉันต้องการบันทึกไฟล์เดียวเช่นเดียวกับวิธีบันทึกสิ่งที่แนบมา
สามารถกำหนดค่าได้หรือไม่?
คำตอบ:
ข้อความจริงจะแสดงเป็นไฟล์แนบดังนั้นคุณจึงสามารถบันทึกได้จากรายการไฟล์แนบ จากดัชนีหรือข้อความเองให้กดvเพื่อเปิดไฟล์แนบและsเพื่อบันทึก
sคำสั่งบันทึกไปยังกล่องจดหมายซึ่งสำหรับคุณอยู่ในรูปแบบ Maildir น่าเสียดายที่ไม่มีคำสั่งบันทึกไปยังไฟล์อาจเป็นเพราะในรูปแบบ mbox ที่ผ่านมากล่องจดหมายที่มีเมลเดียวจะเป็นเพียงไฟล์ที่มีเมลนั้น
muttคำสั่งท่อข้อความ (ทางลัดเริ่มต้น|) สามารถนำมาใช้สำหรับการนี้ cat > DESIRED-FILE-PATHจะเปิดบรรทัดคำสั่งและการที่คุณเขียน
ตัวเลือก "ไปป์ถอดรหัส" ควบคุมสิ่งที่เกิดขึ้นกับส่วนหัวและส่วนล้อเลียนเมื่อคุณบันทึกข้อความด้วยวิธีนี้
หนึ่งอาจเขียนแมโครสำหรับฟังก์ชันนี้
set pipe_decode=yesmuttrc ของฉันคือสิ่งที่ Kai von Fintel เขียน
=ดำเนินการ
หากคุณtouchไฟล์แล้วลองบันทึกหรือคัดลอกข้อความไปยังมัน mutt จะใช้มันเป็น mbox
นอกจากนี้คุณอาจต้องการใช้การคัดลอกแทนการบันทึก มัทสมมติว่าเมลควรมีอยู่ในหนึ่งสำเนาและการบันทึกข้อความไปยังกล่องจดหมายอื่นจะลบมันออกจากอันแรกในขณะที่การคัดลอกจะทำสำเนาที่เหมาะสม
คำตอบของKai von Fintelทำงานได้อย่างสมบูรณ์แบบ แต่ฉันแค่คิดว่าฉันจะแบ่งปันแมโครเพื่อปรับปรุงกระบวนการนี้
ประการแรกใน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รูปแบบของชื่อไฟล์เป็น นอกจากนี้ยังแปลง/เป็น∕เพื่อป้องกันการสร้างไดเรกทอรีย่อย
formailในสคริปต์หรือไม่
formailดังนั้นฉันจึงได้อ่าน อย่างไรก็ตามฉันไม่แน่ใจว่าคุณอ้างถึงส่วนใดในสคริปต์ของฉัน ใช้formailเพื่อแยกเรื่องและวันที่? ถ้าเป็นเช่นนั้นอาจเป็นความคิดที่ดี ฉันอยากให้คุณเขียนคำตอบ ฉันจะลงคะแนนมันแน่นอน
ฉันได้ลองคำตอบที่แนะนำทั้งหมดแล้ว แต่ไม่สามารถรับอีเมลดิบแบบหลายส่วน (text / plain + text / html) เพื่อบันทึกลงในไฟล์รวมถึงส่วนหัวและทุกอย่าง ฉันต้องการสิ่งนี้เพื่อป้อนตัวกรองสแปมของฉันด้วยอีเมลเพื่อสอนว่าจดหมายนั้นเป็นจดหมายขยะหรือไม่ ...
วิธีแก้ปัญหาที่ฉันพบคือกดe(เช่น "แก้ไขข้อความ") บนข้อความเปิดซึ่งเปิดข้อความดิบในตัวแก้ไขที่คุณเลือก Raw ที่นี่หมายถึงว่าคุณได้รับข้อความตรงตามที่ได้รับใน mutt ดังนั้นคุณจึงมีส่วนหัวและไบต์ทั้งหมดที่ประกอบด้วยข้อความ
หลังจากกดปุ่มeฉันเพิ่งเขียนบัฟเฟอร์ (ฉันตั้งค่าตัวแก้ไขเป็นกลุ่ม ) ไปยังไฟล์ด้วย:w <path_to_file>/<file_name>และนั่นก็คือ
PS: ฉันจะเพิ่มสิ่งนี้เป็นความคิดเห็น แต่คุณต้องมีชื่อเสียงในระดับหนึ่งเพื่อทำสิ่งนี้ นอกจากนี้ฉันรู้ว่าคำถามนั้นเก่ามาก แต่เนื่องจากNeomuttยังคงถูกใช้โดยคนจำนวนมากฉันคิดว่านี่อาจช่วยคนได้
ปรับปรุง:ฉันมองข้ามpipe-decodeตัวเลือกที่ไก่พูดถึง ด้วยการตั้งค่าตัวเลือกที่ถูกต้องมันจะทำงานผ่าน|ได้เช่นกัน ยังแก้ปัญหาของฉันยังใช้งานได้ ;-)