Извлекать вложения при отправке писем в PHP - PullRequest
8 голосов
/ 26 октября 2009

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

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

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

Ответы [ 2 ]

5 голосов
/ 03 июня 2015

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

<?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. См. документацию библиотеки .

5 голосов
/ 26 октября 2009

Вам, вероятно, понадобится сделать следующее:

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

  2. Получить этот скрипт для чтения необработанного электронного письма с php: // stdin (file_get_contents - самый простой)

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...