2009-10-26 2 views
8

Я знаю, что с моим Cpanel хостинга я могу конвейер почтового ящика в сценарий, но то, что я хочу сделать, это:вложение Извлечения конвейера почты на PHP

  1. Отправить на [email protected]
  2. Труба для mail.php
  3. mail.php читает тему и вложение .txt
  4. содержание предмета и .txt вложения хранятся в базе данных

Is есть ли способ сделать это с прямым PHP?

ответ

5

Вы, вероятно, нужно сделать следующее:

  1. Написать PHP скрипт, который исполняемым в CLI (путем добавления # заявление в верхней части сценария, который указывает на PHP двоичный файл, то устанавливает его исполняемые разрешения).

  2. Получить этот скрипт для чтения необработанной электронной почты из PHP: // (file_get_contents стандартного устройства ввода проще)

  3. Получить этот скрипт для декодирования почты и части, используя что-то вроде PEAR :: Mail :: Мима :: Decode или я думаю, что есть удобный компонент Zend Framework).

  4. Прочитайте прикрепление и тему из декодированного сообщения и хранить в обычном режиме

  5. выход (0) в конце, чтобы сказать ИКС, что это был чистый выход - любой другой выход() состояние может привести к отскок электронной почты.

+0

Спасибо! Я новичок в исполняемых файлах, поэтому вам нужно будет изучить его, знаете ли вы какие-либо ссылки, которые могут быть полезны мне :) – tarnfeld

5

Там существует библиотека PHP, называется php-mime-mail-parser, которая сама зависит от PECL mailparse library. Когда вы те, что установлены, код для достижения того, что вы хотите, довольно прямо вперед:

<?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(); 

Можно передать почту в сценарий, как он читает из STDIN. Вы также можете прочитать из файла, изменив setStream на setPath. См. documentation of the library.

+3

Это должен быть правильный ответ – Daniel

+0

Какие изменения необходимы для сохранения и хранения pdf-файла? Существует ли какое-либо шифрование или кодировка, с которыми нужно иметь дело, или просто изменить txt на pdf? – Tarquin

+0

Сохранение содержимого файла PDF в поле базы данных не является чем-то, что я рекомендую. Лучше сохраните его в файловой системе и просто сохраните путь. – akirk