Frage

Ich weiß, mit meinem cPanel Hosting ich kann Rohr einen E-Mail-Posteingang zu einem Skript, aber was ich will zu tun ist:

  1. Senden an hi@hi.com
  2. Rohr Mail.php
  3. mail.php liest das Thema und eine .txt Befestigung
  4. Der Inhalt des Faches und .txt Befestigung wird in der Datenbank gespeichert

Gibt es eine Möglichkeit, dies mit straight-forward PHP zu tun?

War es hilfreich?

Lösung

Sie werden wahrscheinlich tun müssen, die folgenden:

  1. einen PHP-Skript schreiben, die an der CLI ausführbar ist (durch einen # addieren! Erklärung am Anfang des Skripts, das an dem PHP-Binär-Punkten, dann Einstellungen seine ausführbaren Berechtigungen).

  2. das Skript Holen Sie sich die rohe E-Mail von PHP zu lesen: // stdin (file_get_contents ist am einfachsten)

  3. das Skript Erhalten Sie die E-Mail, um Teile zu dekodieren, mit so etwas wie PEAR :: Mail :: Mimt :: Decode oder ich denke, es ist eine handliche Zend Framework-Komponente).

  4. Lesen Sie den Anhang und Gegenstand von der decodierten Nachricht, und speichert als normal

  5. exit (0) am Ende der CLI zu sagen, dass es eine saubere Ausfahrt war - jeder andere Ausgang () Status könnte prallte E-Mail führen

  6. .

Andere Tipps

Es gibt eine PHP-Bibliothek, die so genannte php-mime-mail-parser , die sich abhängig auf der PECL mailparse Bibliothek . Wenn Sie diese installiert haben, um den Code zu erreichen, was Sie wollen, ganz geradlinig:

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

Sie können über die Pipeline die E-Mail in das Skript, wie es von STDIN liest. Sie können auch durch eine Änderung setStream setPath aus einer Datei lesen. Finden Sie in der Dokumentation der Bibliothek .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top