2017-04-15 13 views
10

Tôi đã triển khai máy chủ email tùy chỉnh và ứng dụng web. Máy chủ chỉ là một API REST (tương tự với API gmail của google) sử dụng một bên thứ ba (sendgrid) để gửi và nhận. Các email được lưu trữ trong cơ sở dữ liệu. Web client chỉ nói chuyện với máy khách REST để gửi và nhận.Mặt tiền Máy chủ IMAP - cách tạo một mặt tiền?

Vấn đề với cách tiếp cận này là nó không triển khai IMAP ở bất kỳ đâu, điều này làm cho khách hàng chuẩn không thể (kết nối, iphone, v.v.) kết nối và sử dụng API email của chúng tôi. Điều này giới hạn khách hàng chỉ sử dụng ứng dụng khách của chúng tôi cho email.

Những gì tôi cần là một số loại máy chủ IMAP "mặt tiền" sẽ quản lý kết nối với khách hàng và thực hiện cuộc gọi đến API REST của tôi để thực sự xử lý yêu cầu (nhận email, gửi email, v.v.).

Mặt nạ IMAP có thể được triển khai như thế nào? Có thể có một cách để lấy một MailServer hiện có và gut nó và chỉ tất cả nó là "sự kiện" để thực hiện cuộc gọi đến API của tôi?

+0

Có, điều đó là có thể. Dovecot, ví dụ, cho phép bạn cắm vào các mô-đun lưu trữ. – arnt

+0

Bạn có sở thích ngôn ngữ không? – vzwick

+0

Câu hỏi cho biết .net, vì vậy C# ish ... nhưng không có nhiều mã máy chủ IMAP trong C#. Khách hàng, có, chắc chắn, nhưng không phải máy chủ, và cho đến nay phần lớn nhất của vấn đề là để phục vụ IMAP ... – arnt

Trả lời

2

(Điều này về cơ bản là nhận xét của tôi một lần nữa, nhưng xây dựng khá hơn một chút.)

Một số máy chủ IMAP, đáng chú ý nhất Dovecot, được cấu trúc như truy cập tập tin là trong một mô-đun riêng biệt với một giao diện được xác định. Dovecot không phải là duy nhất, nhưng nó đến nay là phổ biến nhất và giao diện phụ trợ của nó được biết là thích hợp, vì vậy tôi muốn có những mối quan tâm cụ thể vắng mặt.

Đã tồn tại các mô-đun không phải tệp chẳng hạn như imapc, chứng minh rằng nó có thể được thực hiện. Khi một khách hàng mở hộp thư được hỗ trợ bởi imapc, Dovecot phân tích lệnh IMAP, gọi hàm truy nhập thư trong imapc, imapc phát hành lệnh IMAP mới, phân tích phản hồi của máy chủ, trả về cấu trúc C cho Dovecot, Dovecot thời trang phản hồi IMAP mới và trả về cho khách hàng .

Tôi đề nghị bạn lấy dovecot source, xem src/lib-storage/inbox/index/imapc và các phụ trợ khác trong that directory và triển khai một phiên bản nói REST API của bạn với tư cách khách hàng.

2

tl: dr; viết cổng của bạn trong Perl; sử dụng Net :: IMAP :: Server; ghi đè Net :: IMAP :: Server :: Mailbox; và sử dụng một trong nhiều máy khách REST Perl để nói chuyện với máy chủ của bạn.

Đặt cược tốt nhất của bạn để thực hiện việc này nhanh chóng, đồng thời duy trì một số lượng bảo mật mã hợp lý, là với Perl. Bạn sẽ cần hai mô-đun Perl. Đầu tiên là Net::IMAP::Serverhere là kho lưu trữ Github cho mô-đun đó. Đây là máy chủ RFC 3501 tuân thủ tiêu chuẩn được thiết kế cố định để có một cửa hàng thư có thể cấu hình. Bạn sẽ ghi đè lên thực thi Net :: IMAP :: Server :: Mailbox mặc định bằng mã của riêng bạn để nói chuyện với chương trình phụ trợ email tùy chỉnh của bạn.

Đối với mô-đun thứ hai, hãy chọn (các) mô-đun Perl yêu thích của bạn để sử dụng để nói chuyện với máy chủ REST của bạn. Sự lựa chọn của bạn phụ thuộc vào mức độ kiểm soát hạt mịn mà bạn muốn có trong quá trình xây dựng và phân phối các thông điệp REST.

May mắn thay, ở đây bạn có rất nhiều lựa chọn. Một khả năng là Eixo::REST, có kho lưu trữ Github here. Eixo :: REST dường như đối phó tốt với các cuộc gọi REST API không đồng bộ và không đồng bộ, nhưng nó không cung cấp nhiều quyền kiểm soát đối với việc quản lý khóa X509. Tùy thuộc vào cách googley API của bạn, cũng có mô-đun REST::Google. Điều thú vị là, gia đình này cũng có một mô-đun REST::Google::Apps::EmailSettings, đặc biệt để thiết lập funkiness cụ thể cho Gmail như nhãn và ngôn ngữ. Cuối cùng, mô-đun REST::Consumer dường như đóng gói rất nhiều thứ cụ thể về https như thời gian chờ và xác thực làm thông số cho việc diễn giải đối tượng Perl.

Nếu bạn sử dụng các khung công tác hiện có này, thì khoảng 90% mã cần thiết đã được thực hiện cho bạn.

Không làm điều này bằng cách hack Dovecot hoặc bất kỳ máy chủ thư nào khác được viết bằng C hoặc C++. Nếu bạn hack cùng một máy chủ thư một cách nhanh chóng bằng cách sử dụng một ngôn ngữ biên dịch, máy chủ của bạn sẽ sớm hay muộn trải nghiệm tất cả niềm vui tràn bộ đệm và ngăn xếp đập và mọi thứ khác mà Internet không làm chết máy chủ thư. Làm cho nó hoạt động an toàn trước, sau đó tối ưu hóa sau.

+0

Làm cho tinh thần. Và Perl có vẻ như một ngôn ngữ lý tưởng để xử lý thư vì Perl là một nhà vô địch trong phân tích và quản lý văn bản. Vì vậy, tôi cần một guru Perl sau đó, vì tôi rất Perl noob và không có thời gian để làm điều này ... – richard

1

Kể từ khi bạn quen với .NET, tôi sẽ đề nghị hack một trong các triển khai sau của máy chủ IMAPv4 theo ý thích của bạn:

  • Lumisoft Mail Server - một dự án rất cũ thực sự (chúng ta hãy gọi nó là "trưởng thành", Huh?). Không được quá tắt bởi các trang web thập niên cũ và thiếu một liên kết github - nguồn được cung cấp theo "tải khác".
  • McNNTP - cũng là một dự án cũ và tập trung chủ yếu vào NNTP (như tên gọi) nhưng rất gần với những gì bạn đang cố gắng đạt được về thành phần IMAP. Take a look, you'll probably find this a good starting point.
Các vấn đề liên quan