Domanda

So che con il mio hosting cPanel posso reindirizzare una casella di posta elettronica a uno script, ma quello che voglio fare è:

  1. Invia a hi@hi.com
  2. Pipe to mail.php
  3. mail.php legge l'oggetto e un allegato .txt
  4. Il contenuto dell'oggetto e l'allegato .txt sono archiviati nel database

C'è un modo per farlo con PHP diretto?

È stato utile?

Soluzione

Probabilmente dovrai fare quanto segue:

  1. Scrivi uno script PHP eseguibile nella CLI (aggiungendo una dichiarazione #! nella parte superiore dello script che punta al binario PHP, quindi imposta le sue autorizzazioni eseguibili).

  2. Ottieni quello script per leggere l'e-mail non elaborata da php: // stdin (file_get_contents è il più semplice)

  3. Ottieni quello script per decodificare la posta in parti, usando qualcosa come PEAR :: Mail :: Mime :: Decode o penso che ci sia un utile componente Zend Framework).

  4. Leggi l'allegato e l'oggetto dal messaggio decodificato e memorizza normalmente

  5. exit (0) alla fine per dire alla CLI che si trattava di un'uscita pulita - qualsiasi altro stato exit () potrebbe causare un'e-mail rimbalzata.

Altri suggerimenti

Esiste una libreria PHP, chiamata php-mime-mail -parser che a sua volta dipende dalla libreria PECL mailparse . Una volta installati, il codice per ottenere ciò che desideri è abbastanza semplice:

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

Puoi reindirizzare la posta nello script, come si legge da STDIN . Puoi anche leggere da un file modificando setStream in setPath . Consulta la la documentazione della biblioteca .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top