Pergunta

Eu sei com meus cPanel hospedagem I pode canalizar uma caixa de entrada de e-mail a um script, mas o que eu quero fazer é:

  1. Enviar para hi@hi.com
  2. tubo para mail.php
  3. mail.php lê o assunto e um anexo de .txt
  4. O conteúdo do assunto e apego .txt são armazenados no banco de dados

Existe uma maneira de fazer isso com PHP direto?

Foi útil?

Solução

Você provavelmente precisará fazer o seguinte:

  1. Escrever um script PHP que é executável no CLI (adicionando um #! Declaração no topo do script que aponta para o binário PHP, depois em Configurações suas permissões executáveis).

  2. Get que script para ler o e-mail cru de php: // stdin (file_get_contents é mais fácil)

  3. Get esse script para decodificar a mensagem em partes, usando algo como PEAR :: Mail :: Mime :: Decode ou eu acho que há um útil componente Zend Framework).

  4. Leia o anexo e assunto da mensagem decodificada, e armazenar como

  5. normais
  6. exit (0) no final para dizer a CLI que era uma saída limpa -. Qualquer outro exit () estado poderia causar um email saltou

Outras dicas

Existe uma biblioteca PHP, chamado php-mime-mail-parser que se depende na PECL Mailparse biblioteca . Quando você tem aqueles instalado, o código para conseguir o que deseja é bastante simples:

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

Você pode enviar e-mail para o script, como se lê a partir STDIN. Você também pode ler a partir de um arquivo alterando setStream para setPath. Consulte a documentação do do biblioteca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top