2009-10-26 33 views
8

Tôi biết với cPanel của tôi lưu trữ tôi có thể đường ống một hộp thư email đến một kịch bản, nhưng những gì tôi muốn làm là:Extract file đính kèm khi đường ống mail cho PHP

  1. Send to [email protected]
  2. ống để mail.php
  3. mail.php đọc chủ đề, và một tập tin đính kèm .txt
  4. Nội dung của chủ đề và tập tin đính kèm .txt được lưu trữ trong cơ sở dữ liệu

Is có cách nào để làm điều này với PHP thẳng về phía trước?

Trả lời

5

Bạn có lẽ sẽ cần phải làm như sau:

  1. Viết một kịch bản PHP đó là thực thi tại CLI (bằng cách thêm một # khai ở phía trên cùng của kịch bản mà chỉ vào nhị phân PHP, sau đó cài đặt các quyền thực thi của nó).

  2. Nhận kịch bản để đọc email thô từ php: // stdin (file_get_contents là dễ nhất)

  3. Nhận kịch bản đó để giải mã các mail đến các bộ phận, sử dụng một cái gì đó giống như PEAR :: Mail :: Mime :: Giải mã hoặc tôi nghĩ rằng có một thành phần Zend Framework tiện dụng).

  4. Đọc tập tin đính kèm và chủ đề từ thông điệp giải mã, và lưu trữ như bình thường

  5. exit (0) vào cuối nói với CLI rằng đó là một lối ra sạch - bất kỳ lối khác() tình trạng có thể gây ra một email bị trả lại.

+0

Cảm ơn! Tôi mới vào các tập tin thực thi, vì vậy sẽ cần phải nhìn vào nó, bạn có biết bất kỳ liên kết nào có thể hữu ích cho tôi không :) – tarnfeld

5

Có thư viện PHP, được gọi là php-mime-mail-parser tự nó phụ thuộc vào PECL mailparse library. Khi bạn đã những cài đặt, mã để đạt được những gì bạn muốn là khá thẳng về phía trước:

<?php 
require_once 'MimeMailParser.class.php'; 

$parser = new MimeMailParser(); 
$parser->setStream(STDIN); 

$subject = $parser->getHeader('subject'); 

$attachment_content = false; 
foreach ($parser->getAttachments() as $attachment) { 
    $extension = pathinfo($attachment->filename, PATHINFO_EXTENSION); 
    if ($extension == "txt") { 
     $attachment_content = $attachment->content; 
     break; 
    } 
} 

// adapt to what ever database you are using 
$sth = $mysqli->prepare("INSERT INTO mails (subject, attachment) VALUES (:subject, :attachment)"); 
$sth->bindParam(':subject', $subject, PDO::PARAM_STR); 
$sth->bindParam(':attachment', $attachment_content, PDO::PARAM_STR); 
$sth->execute(); 

Bạn có thể đường ống qua đường bưu điện vào kịch bản, vì nó đọc từ STDIN. Bạn cũng có thể đọc từ một tệp bằng cách thay đổi setStream thành setPath. Xem số documentation of the library.

+3

Đây phải là câu trả lời đúng – Daniel

+0

Cần phải thay đổi loại nào để lưu và lưu trữ tệp pdf? Có bất kỳ loại mã hóa hoặc mã hóa nào cần được xử lý hoặc chỉ cần thay đổi txt sang pdf không? – Tarquin

+0

Lưu trữ nội dung của tệp PDF trong trường cơ sở dữ liệu không phải là điều tôi muốn đề xuất. Lưu trữ nó tốt hơn vào hệ thống tập tin và chỉ lưu trữ đường dẫn. – akirk

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