Extrahieren Anhänge beim Anschließen von Leitungen Mails an PHP
Frage
Ich weiß, mit meinem cPanel Hosting ich kann Rohr einen E-Mail-Posteingang zu einem Skript, aber was ich will zu tun ist:
- Senden an hi@hi.com
- Rohr Mail.php
- mail.php liest das Thema und eine .txt Befestigung
- Der Inhalt des Faches und .txt Befestigung wird in der Datenbank gespeichert
Gibt es eine Möglichkeit, dies mit straight-forward PHP zu tun?
Lösung
Sie werden wahrscheinlich tun müssen, die folgenden:
-
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).
-
das Skript Holen Sie sich die rohe E-Mail von PHP zu lesen: // stdin (file_get_contents ist am einfachsten)
-
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).
-
Lesen Sie den Anhang und Gegenstand von der decodierten Nachricht, und speichert als normal
-
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
.
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 .