เมื่อฉันกดS
mutt มันจะบันทึกเมลเป็นรูปแบบโฟลเดอร์เมล ( cur/ tmp/ new/
) แต่ฉันต้องการบันทึกไฟล์เดียวเช่นเดียวกับวิธีบันทึกสิ่งที่แนบมา
สามารถกำหนดค่าได้หรือไม่?
เมื่อฉันกดS
mutt มันจะบันทึกเมลเป็นรูปแบบโฟลเดอร์เมล ( cur/ tmp/ new/
) แต่ฉันต้องการบันทึกไฟล์เดียวเช่นเดียวกับวิธีบันทึกสิ่งที่แนบมา
สามารถกำหนดค่าได้หรือไม่?
คำตอบ:
ข้อความจริงจะแสดงเป็นไฟล์แนบดังนั้นคุณจึงสามารถบันทึกได้จากรายการไฟล์แนบ จากดัชนีหรือข้อความเองให้กดvเพื่อเปิดไฟล์แนบและsเพื่อบันทึก
s
คำสั่งบันทึกไปยังกล่องจดหมายซึ่งสำหรับคุณอยู่ในรูปแบบ Maildir น่าเสียดายที่ไม่มีคำสั่งบันทึกไปยังไฟล์อาจเป็นเพราะในรูปแบบ mbox ที่ผ่านมากล่องจดหมายที่มีเมลเดียวจะเป็นเพียงไฟล์ที่มีเมลนั้น
mutt
คำสั่งท่อข้อความ (ทางลัดเริ่มต้น|
) สามารถนำมาใช้สำหรับการนี้ cat > DESIRED-FILE-PATH
จะเปิดบรรทัดคำสั่งและการที่คุณเขียน
ตัวเลือก "ไปป์ถอดรหัส" ควบคุมสิ่งที่เกิดขึ้นกับส่วนหัวและส่วนล้อเลียนเมื่อคุณบันทึกข้อความด้วยวิธีนี้
หนึ่งอาจเขียนแมโครสำหรับฟังก์ชันนี้
set pipe_decode=yes
muttrc ของฉันคือสิ่งที่ 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
ตัวเลือกที่ไก่พูดถึง ด้วยการตั้งค่าตัวเลือกที่ถูกต้องมันจะทำงานผ่าน|
ได้เช่นกัน ยังแก้ปัญหาของฉันยังใช้งานได้ ;-)