2009-10-26 3 views
8

je sais avec mon cPanel hébergement je peux tuyau une boîte de réception e-mail à un script, mais ce que je veux faire est:pièces jointes Extraire lorsque la tuyauterie mails à PHP

  1. Envoyer à [email protected]~~V~~singular~~3rd
  2. tuyau à mail.php
  3. mail.php lit le sujet, et une pièce jointe txt
  4. le contenu du sujet et l'attachement sont txt stockées dans la base de données

est il y a un moyen de le faire avec PHP direct?

Répondre

5

Vous aurez probablement besoin faire ce qui suit:

  1. Ecrire un script PHP qui est exécutable au CLI (en ajoutant une # déclaration en haut du script qui pointe vers le binaire PHP, puis les paramètres de ses autorisations exécutables).

  2. Obtenez ce script pour lire l'e-mail brut de php: // stdin (file_get_contents est plus facile)

  3. Get ce script pour décoder le courrier dans des pièces, en utilisant quelque chose comme PEAR :: Mail Mime :: Décode ou je pense qu'il y a un composant pratique de Zend Framework).

  4. Lire la pièce jointe et objet du message décodé, et stocker la sortie normale

  5. (0) à la fin de dire la CLI qu'il était une sortie propre - statut tout autre sortie() pourrait causer un email rebondi.

+0

Merci! Je suis nouveau pour les fichiers exécutables, donc il faut que je me penche dessus, connaissez-vous des liens qui pourraient m'être utiles :) – tarnfeld

5

Il existe une bibliothèque PHP, appelée php-mime-mail-parser qui lui-même dépend de la PECL mailparse library. Lorsque vous avez ceux installés, le code pour obtenir ce que vous voulez est assez simple:

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

Vous pouvez diriger le courrier dans le script, comme il se lit de STDIN. Vous pouvez également lire à partir d'un fichier en remplaçant setStream par setPath. Voir le documentation of the library.

+3

Cela devrait être la bonne réponse – Daniel

+0

Quel genre de changements sont nécessaires pour enregistrer et stocker un fichier pdf? Y at-il une sorte de cryptage ou d'encodage qui doit être traitée ou simplement changer le txt en pdf? – Tarquin

+0

Stocker le contenu d'un fichier PDF dans un champ de base de données n'est pas quelque chose que je recommanderais. Mieux vaut le stocker dans le système de fichiers et simplement stocker le chemin. – akirk

Questions connexes