2009-11-22 60 views
5

Tôi đang viết một ứng dụng web cần nhận thư e-mail đến địa chỉ email nội bộ của người dùng, cho phép quản trị viên phê duyệt và sau đó chuyển tiếp tới hộp thư bên ngoài của người dùng tương ứng.Đã nhận được tin nhắn bưu điện

Tôi đã cài đặt và định cấu hình postfix cho tác vụ nhận thư. Nó sử dụng địa chỉ e-mail ảo và cơ sở dữ liệu hiện tại của tôi nơi lưu trữ địa chỉ email của người dùng. Lưu trữ email cục bộ là maildir và tôi sử dụng MDA ảo của postfix.

Về cơ bản, tôi muốn thực thi tập lệnh mỗi khi nhận được thư mới và người dùng nào (id thư maildir cũng sẽ rất hữu ích). Sau đó, tôi có thể đọc tin nhắn từ mã python (python đã có một mô-đun cho các hộp thư maildir) và chèn nó vào cơ sở dữ liệu. tôi có thể nghĩ ra ba cách để làm điều này: maildirs dùng

  • lặp và kiểm tra nếu có bất kỳ tin nhắn mới, nhưng nó sẽ không có hiệu quả cho số lượng lớn người dùng.
  • sử dụng dbmail và sau đó kiểm tra xem có bất kỳ thư mới nào trong cơ sở dữ liệu hay không (điều này sẽ nhanh hơn, nhưng tôi phải cấu hình mọi thứ từ đầu). Bên cạnh đó, các bảng dữ liệu người dùng hiện tại không thể được sử dụng.
  • viết trình bao bọc xung quanh maildrop/virtual để lưu thư trong db và trong maildir, nhưng tôi cần một cách để kiểm tra xem thư đã nhận có hợp lệ và được lưu thành công theo MDA thực không.

Bất kỳ đề xuất nào được đánh giá cao!

Trả lời

5

Để trả lời câu hỏi của riêng tôi, tôi đã sử dụng postfix content_filter với cờ X được đặt trong đường ống và địa chỉ nhận và xử lý thư theo cách thủ công. Vì tôi không cần truy cập thư trong maildir, cách tiếp cận này hoạt động tốt cho tôi.

8

Trong tệp /etc/aliases bạn có thể chỉ định chương trình được thực hiện mỗi khi người dùng nhận thư. Chương trình này nhận được thư trên stdin. Vì vậy, bạn không phải thăm dò ý kiến ​​và chương trình của bạn được chạy ngay lập tức.

+0

Đây sẽ là cách tiếp cận tốt đẹp, nhưng tôi đang sử dụng cơ chế chuyển tiếp ảo. – fest

Các vấn đề liên quan