MTA ขั้นต่ำที่ส่งเมลภายในเครื่อง (สำหรับ cron) หรือไม่


17

บนแล็ปท็อปของฉันฉันได้ตั้ง cron ที่ทำงานประจำสัปดาห์ หากมีสิ่งที่ต้องรายงานฉันต้องการรับอีเมล ตอนนี้ผมใช้ KMail เป็นทบวงซึ่งสามารถที่จะอ่านจดหมายจากไดเรกทอรี Maildir ~/.local/share/local-mailที่ ดังนั้นฉันต้องการให้ส่งเมลโลคัลไปยังโฟลเดอร์นั้น (ที่มีโครงสร้าง Maildir)

ฉันหวังว่าโปรแกรมแบบง่าย ๆ ที่ตายแล้วมีอยู่แล้วที่มีsendmailส่วนต่อประสาน (เช่นที่echo "$REPORT" | mail -s "$SUBJECT" "$ME"สามารถใช้งานได้) การติดตั้ง exim หรือ forwarding mail ไปยัง remote mailserver ของฉันนั้นถือว่าเกินความจริง

คำถามวิธีที่ง่ายที่สุดในการส่งต่อจดหมายทั้งหมดจากเซิร์ฟเวอร์? ดูเหมือนว่าจะกำหนดเป้าหมายการส่งต่อระยะไกลซึ่งไม่เหมาะกับความต้องการของฉัน (ฉันต้องการการจัดส่งในพื้นที่) นี้ด้าย Gentoo เก่าสิ้นสุดลงในงานหัตถกรรมสคริปต์เก่าใน Perl แน่นอนว่าต้องมีโปรแกรมที่เรียบง่ายและคิดง่าย

คำแนะนำใด ๆ ฉันใช้ Arch Linux


ทะนงสิ่งที่เอ็มที Arch ใช้โดยค่าเริ่มต้นการติดตั้งและทำงานคุณก็สามารถใช้userX@localhost.localdomainและสิ่งที่ควรจะจบลงใน/var/spool/mail/userX; คุณสามารถตรวจสอบด้วยตัวเองหรือสร้างบัญชีใหม่เพื่อตรวจสอบกับ MUA ของคุณ
goldilocks

2
googling บางตัวพาฉันไปที่github.com/corecode/dma aka Dragonfly Mail Agent
tripleee

@goldilocks Arch เป็นการกระจายที่น้อยที่สุดไม่มีการติดตั้ง MTA ตามค่าเริ่มต้น /usr/bin/sendmailไม่ได้อยู่และเอาท์พุท cron /dev/nullสิ้นสุดใน
Lekensteyn

@tripleee ฉันพบว่า แต่ละเว้นเมื่อฉันเห็น SMTP และ TLS ถูกกล่าวถึง ขอบคุณที่พูดถึงฉันจะได้ดูอีกครั้ง ไม่ฟังพอร์ต 25ฟังดูดีสำหรับฉัน
Lekensteyn

@tripleee แต่น่าเสียดายที่ dma ไม่รองรับ Maildir เฉพาะ spool dirs /var/spool/mailค่ะ
Lekensteyn

คำตอบ:


7

เนื่องจากฉันไม่สามารถหาโปรแกรมขนาดเล็กที่มีอยู่ฉันจึงตัดสินใจเขียนโปรแกรมของตัวเอง เดิมทีฉันคิดว่า:

#!/bin/bash
# Simple sendmail
# filename per spec at http://cr.yp.to/proto/maildir.html
rand=$((RANDOM % 1000))
msgname=$(date +%s).P$$R$rand.$(hostname | tr '/:' '\057\072')

# Safety measure: do not overwrite existing mail
set -o noclobber

cat > ~peter/".local/share/local-mail/inbox/new/$msgname"

ใช้งานได้ ... ยกเว้นว่าผู้ใช้ที่เรียกใช้งานสคริปต์ไม่ใช่ "peter" ทายาทของความคิดนี้เป็น "เล็ก" โปรแกรม C, femtomail จาก README:

femtomail - MDA ขั้นต่ำพร้อมการสนับสนุน Maildir

femtomail เป็น Mail Delivery Agent (MDA) ขั้นต่ำสำหรับเมลภายใน เมลได้รับการยอมรับจากอินพุตมาตรฐานและวางไว้ในกล่อง Maildir ของผู้ใช้ ซอฟต์แวร์นี้มีไว้สำหรับใช้กับเครื่องที่มีผู้ใช้คนเดียว

การนำส่งทางไกล, daemonizing, การตรวจสอบผู้ส่ง ฯลฯ ไม่ได้ดำเนินการและจะไม่ถูกนำไปใช้เนื่องจากความซับซ้อน femtomail ไม่ได้เขียนเพราะซอฟต์แวร์จดหมายไม่ได้อยู่ แต่เพราะซอฟต์แวร์ที่มีอยู่มีขนาดใหญ่เกินไปสำหรับงานที่เรียบง่ายของการส่งจดหมายไปยังผู้ใช้ cron ท้องถิ่น

ขั้นตอนการทำงานของ femtomail:

  1. เปลี่ยนผู้ใช้และกลุ่มกระบวนการ
  2. สร้างไฟล์ใหม่ด้วยชื่อไฟล์ที่ไม่ซ้ำในเมลไดเร็กทอรี
  3. เขียนReceivedส่วนหัวไปที่ไฟล์
  4. ส่งผ่านข้อมูลจากอินพุตมาตรฐานไปยังไฟล์
  5. ทางออก

แหล่งที่มาและการติดตั้งรหัสคำแนะนำมีอยู่ที่https://git.lekensteyn.nl/femtomail/


1
มันจะดีถ้า femtomail สามารถ: อ่าน user @ localhost (หรือชื่อโฮสต์ของโฮสต์ท้องถิ่น) และ setuid ผู้ใช้นั้นเขียนอีเมลทั้งในบ้าน dir หรือมาตรฐานที่ไหนสักแห่ง จะต้องมีบิต setuid
gauteh

@gauteh นั่นเป็นขั้นสูงแล้วและอาจไม่เหมาะสำหรับการใช้งานบนเครื่องผู้ใช้คนเดียว คุณสมบัติเพิ่มเติมหมายถึงรหัสที่ใหญ่ขึ้นและโอกาสในการเกิดข้อบกพร่อง กรณีการใช้งานของคุณคืออะไร?
Lekensteyn

เพื่อใช้เป็นเอเจนต์การจัดส่งเมลแบบโลคัลที่สมบูรณ์ระหว่างผู้ใช้ - โดยไม่มีฮาร์ดโค้ด
gauteh

@gauteh ฉันคิดว่าคุณดีกว่าด้วย MDA ที่สมบูรณ์มากขึ้นเช่น Dovecot สำหรับกรณีการใช้งานนั้น คุณมีอิสระที่จะแก้ไข femtomail สำหรับกรณีการใช้งานของคุณและอาจส่ง PR ในกรณีที่คนอื่นสนใจ
Lekensteyn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.