MTA tối thiểu cung cấp thư cục bộ (cho cron)?


17

Trên máy tính xách tay của tôi, tôi đã thiết lập một cron thực hiện công việc hàng tuần. Nếu có điều gì đó để báo cáo, tôi muốn nhận e-mail cho nó. Hiện tại tôi đang sử dụng KMail dưới dạng MUA có thể đọc thư từ thư mục Maildir tại ~/.local/share/local-mail. Vì vậy, tôi muốn thư cục bộ được gửi đến thư mục đó (với cấu trúc Maildir).

Tôi đã hy vọng rằng một chương trình đơn giản đã chết đã tồn tại có sendmailgiao diện (như vậy echo "$REPORT" | mail -s "$SUBJECT" "$ME"có thể hoạt động với nó). Cài đặt exim hoặc chuyển tiếp thư đến máy chủ từ xa của tôi được coi là quá mức cần thiết.

Câu hỏi Cách đơn giản nhất để chuyển tiếp tất cả thư từ máy chủ? dường như nhắm mục tiêu chuyển tiếp từ xa không phù hợp với nhu cầu của tôi (tôi cần giao hàng địa phương). Chủ đề Gentoo cũ này đã kết thúc việc tạo ra một kịch bản cũ trong Perl. Chắc chắn phải có một chương trình đơn giản, chu đáo?

Có khuyến nghị nào không? Tôi đang sử dụng Arch Linux.


Giả sử bất cứ thứ gì MTA Arch sử dụng theo mặc định được cài đặt và chạy, bạn chỉ có thể sử dụng userX@localhost.localdomainvà những thứ đó sẽ kết thúc /var/spool/mail/userX; bạn có thể tự kiểm tra điều này hoặc tạo một tài khoản mới để kiểm tra với MUA của bạn.
goldilocks

2
Một số googling đã đưa tôi đến github.com/corecode/dma aka Dragonfly Mail Agent.
tripleee

@goldilocks Arch là một bản phân phối tối thiểu không có cài đặt MTA theo mặc định. /usr/bin/sendmailkhông tồn tại và đầu ra cron cuối cùng trong /dev/null.
Lekensteyn

@tripleee Tôi gặp phải điều đó nhưng đã bỏ qua nó khi tôi thấy SMTP và TLS được đề cập. Cảm ơn đã đề cập, tôi sẽ có một cái nhìn lại. không nghe trên cổng 25 nghe có vẻ tốt với tôi.
Lekensteyn

@tripleee Thật không may, dma không hỗ trợ Maildir, chỉ spool dirs trong /var/spool/mail.
Lekensteyn

Câu trả lời:


7

Vì tôi không thể tìm thấy một chương trình nhỏ, hiện có, tôi quyết định viết một chương trình của riêng mình. Ban đầu, tôi đã nghĩ ra:

#!/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"

Điều đó đã làm việc ... ngoại trừ nếu người dùng thực thi tập lệnh không phải là "peter". Sự kế thừa của ý tưởng này là một chương trình C "nhỏ", femtomail . Từ README của nó:

femtomail - MDA tối thiểu với sự hỗ trợ của Maildir

femtomail là một Đại lý chuyển phát thư tối thiểu (MDA) cho thư địa phương. Thư được chấp nhận từ đầu vào tiêu chuẩn và được đặt trong hộp Maildir của người dùng. Phần mềm này được thiết kế để sử dụng trên một máy người dùng.

Giao hàng từ xa, daemonizing, xác minh người gửi, vv không được thực hiện và sẽ không được thực hiện do sự phức tạp của nó. femtomail không được viết vì phần mềm thư không tồn tại mà vì phần mềm hiện có quá lớn cho nhiệm vụ đơn giản là gửi thư cron cho người dùng cục bộ .

Quy trình làm việc của femtomail:

  1. Thay đổi quá trình người dùng và nhóm.
  2. Tạo một tệp mới với một tên tệp duy nhất trong thư mục thư.
  3. Viết một Receivedtiêu đề cho tập tin.
  4. Truyền dữ liệu từ đầu vào tiêu chuẩn vào tập tin.
  5. Lối ra.

Mã nguồn và hướng dẫn cài đặt có sẵn tại https://git.lekensteyn.nl/femtomail/ .


1
Sẽ thật tuyệt nếu xương đùi có thể: đọc user @ localhost (hoặc tên máy chủ của máy chủ cục bộ) và setuid người dùng đó, viết email trong thư mục nhà hoặc ở đâu đó tiêu chuẩn. sẽ yêu cầu bit setuid.
gauteh

@gauteh Điều đó đã cao cấp hơn và có thể không được sử dụng trên máy một người dùng. Nhiều tính năng hơn có nghĩa là mã lớn hơn và cơ hội lỗi lớn hơn. Trường hợp sử dụng của bạn là gì?
Lekensteyn

chắc chắn, để sử dụng nó như một đại lý chuyển phát thư cục bộ hoàn chỉnh, giữa những người dùng - không có nội dung được mã hóa cứng.
gauteh

@gauteh Tôi nghĩ bạn tốt hơn với một MDA hoàn chỉnh hơn như Dovecot cho trường hợp sử dụng đó. Bạn có thể tự do vá xương đùi cho trường hợp sử dụng của mình và thậm chí có thể gửi PR trong trường hợp người khác quan tâm.
Lekensteyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.