2009-06-08 39 views

Trả lời

49

Gần đây tôi đã làm việc trên một dự án yêu cầu phân tích cú pháp email từ gmail và cập nhật cơ sở dữ liệu với các giá trị nhất định dựa trên nội dung của email. Tôi đã sử dụng thư viện ezcMail (now) Zeta Components để kết nối với máy chủ thư và phân tích cú pháp email.

Chiến lược tôi đã áp dụng là lọc tất cả thư đến thú vị bằng nhãn "chưa qua chế biến". Chạy tập lệnh PHP qua crontab cứ 15 phút một lần. Tập lệnh sẽ kết nối với máy chủ thư và mở thư mục IMAP chưa được xử lý và phân tích cú pháp từng email. Sau khi chèn các giá trị thú vị vào cơ sở dữ liệu, tập lệnh sẽ di chuyển các tệp sang thư mục IMAP khác "Đã xử lý".

Tôi cũng đã tìm thấy IMAP để tốt hơn POP cho loại xử lý này.

+0

Cảm ơn sự giúp đỡ của Shoan! – Niyaz

+5

Tại sao câu trả lời này bị giảm giá? – Shoan

+0

@Shoan tôi biết câu trả lời này thực sự là cũ .... nhưng bạn sẽ nhớ đăng một số mã cho tôi? – pattyd

3

Bạn cần triển khai ứng dụng email khách trong Php. Đây có thể là một khách hàng POP.

Mã này sẽ truy vấn máy chủ POP chứa email của bạn, tải xuống và sau đó bạn có thể phân tích cú pháp khi cần.

Tìm kiếm nhanh trên google về "POP client php" đã tiết lộ một loạt các tùy chọn khác nhau. Thật khó để nói nếu có thực sự "The One True PHP Thư viện POP", nếu không tôi muốn bao gồm nó ở đây. Nếu bạn đang sử dụng một khung có từ trước, bạn có thể kiểm tra để xem mức hỗ trợ POP của nó, nếu không hãy kiểm tra kết quả của google ở ​​trên và chọn lựa của bạn. Hoặc nó có thể là dễ nhất (và hầu hết giáo dục :)) để cuộn của riêng bạn.

+1

Có một gói Net_POP3 trong http://pear.php.net nhưng cũ (2005). – TonyUser

6

Tôi khuyên bạn nên sử dụng thành phần Zend_Mail của Zend Framework.

1

Nếu bạn muốn tránh tiếp cận POP hoặc IMAP với máy chủ khác để kéo xuống email, bạn có thể thêm 'móc' vào quá trình nhận email trên một số máy chủ SMTP bạn đã thiết lập (có thể cùng một máy chủ php). Sau đó, chỉ cần có email đích được xử lý bởi máy chủ này.

Dưới đây là ví dụ về postfix, nhưng những điều tương tự cũng có thể xảy ra với sendmail.
http://www.adkap.com/autoresponder.html

14

Sử dụng procmail nếu nó được cài đặt trên hệ thống của bạn. Đặt các dòng này trong tệp .procmailrc trong thư mục chính của người dùng nhận e-mail.

:0 
| /path/to/your/script.php 

Hoặc bạn cũng có thể sử dụng một tập tin .forward chứa

"|/path/to/your/script.php" 

Procmail có ưu điểm là nó cho phép bạn để đối phó với bộ lọc phức tạp hơn nếu ứng dụng của bạn đã bao giờ đòi hỏi điều đó.

Tệp script.php của bạn sẽ đọc tiêu đề và nội dung của e-mail từ stdin.

+0

Và, có một hướng dẫn tuyệt vời nêu rõ quá trình nêu trên ở đây: http://www.evolt.org/incoming_mail_and_php –

7

Khám phá fMailbox.Nó không yêu cầu bất kỳ phần mở rộng không chuẩn nào (chẳng hạn như imap) và đã được thử nghiệm với nhiều máy chủ, tệp đính kèm, thông điệp nhiều phần, SSL và hơn thế nữa.

14

Gần đây tôi muốn để có thể nhận email ngay lập tức trong một cái gì đó tôi đã làm vì vậy tôi đã làm một số nghiên cứu (Tôi đến tìm về câu hỏi này ở đây quá thực tế) và Tôi đã tìm thấy Google App Engine khá hữu ích. Nó có api bạn có thể sử dụng để nhận và xử lý các email được gửi đến [email protected]. Tôi biết rằng nó không thực sự hữu ích vì bạn có thể không muốn ứng dụng của bạn trên App Engine và bạn muốn nhận email tại yourdomain.tld, nhưng với một chút thiết lập, bạn có thể có được những gì bạn muốn.

thiết lập cơ bản của tôi là như thế này:

  • Người dùng gửi email đến [email protected] (một địa chỉ email không thực sự tồn tại)
  • mydomain.tld có một địa chỉ email catchall rằng tiền đạo để [email protected]
  • GAEapp (một ứng dụng nhỏ trên công cụ ứng dụng) nhận được email, xử lý nó ra, và gửi một yêu cầu bài với các công cụ liên quan đến mydomain.tld

Vì vậy basicall bạn có thể tạo một ứng dụng GAE nhỏ hoạt động giống như việc di chuyển giữa các email. Ngay cả với chuyển hướng nó sẽ làm việc ra ok, email sẽ được sử dụng tốt.

Ngoài ra tôi quyết định tìm hiểu cho tôi một số django và tôi đã tạo một ứng dụng miễn phí có tên là Emailization về cơ bản sẽ làm điều đó cho bạn. Bạn tạo người nhận như [email protected] và cung cấp URL để POST. Mọi thứ được gửi tới địa chỉ đó sẽ được POST tới URL của bạn. Bạn có thể thực hiện một catchall trên tên miền của bạn mà chuyển tiếp đến người nhận email đó và bạn sẽ nhận được email thông qua catchall quá!

hoặc bạn có thể thấy small GAE app Tôi đã thực hiện rằng bạn có thể tự thiết lập để thực hiện điều tương tự.

Hy vọng rằng sẽ giúp ai đó!

+0

Bạn là một thiên tài !!! –

+0

Tôi thực sự thích ý tưởng này, cảm ơn bạn. –

2

Có một số giải pháp được lưu trữ sẽ chấp nhận email cho tên miền của bạn và sau đó đăng nó lên tập lệnh trên trang web của bạn. Hầu hết những điều này sẽ xử lý việc phân tích các thông báo cho bạn (tách các phần đính kèm, "thành" "khỏi" và các địa chỉ khác, v.v.).

Bạn chỉ cần tạo tập lệnh nhận POST MẪU và thực hiện bất kỳ điều gì bạn cần với nó.

Bạn cũng có thể nhìn vào giống phi phi (bởi MailChimp), SendGrid, và PostMarkApp.

+1

Mailgun là chính xác những gì tôi cần và họ có một tầng miễn phí rất hào phóng! – mattl

2

Có một hướng dẫn tuyệt vời cho đây này:

http://www.evolt.org/incoming_mail_and_php

trong đó bao gồm làm thế nào để có email gửi trực tiếp đến kịch bản của bạn, mà kịch bản của bạn đọc qua stdin (fopen, fread, vv) Các mã hướng dẫn thậm chí phân tích cú pháp cơ bản của tiêu đề/nội dung cho bạn.

2

Giải pháp được lưu trữ dưới dạng Travis Austin được đề xuất hoạt động tốt.

Nếu bạn đang tìm kiếm một máy chủ tự lưu trữ, bạn có thể xem mô-đun Mailin cho phép bạn nhận email, phân tích cú pháp chúng và đăng chúng lên một webhook mà bạn chọn.It cũng kiểm tra dkim và spf, tính toán điểm spamassassin và xác định ngôn ngữ tin nhắn.

Tôi không biết liệu nó có phù hợp với nhu cầu của bạn vì nó được viết trong node.js hay không, nhưng bạn càng có nhiều tùy chọn hơn thì càng tốt. (Tuyên bố từ chối trách nhiệm: Tôi là người duy trì Mailin) ​​

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