Heim >Backend-Entwicklung >PHP-Tutorial >Rohrleitungs -E -Mails an eine Laravel -Bewerbung
Kernpunkte
php artisan email:parse
, der in Artisan registriert und ausgeführt werden kann, um die ursprüngliche Nachricht aus dem IO -Stream abzurufen. php-mime-mail-parser
usw., um die ursprüngliche Nachricht in einen separaten Abschnitt aufzulösen. Dies ermöglicht das Abrufen von Header wie das Thema und den Körper der E -Mail. Die Parsen -Mail kann dann leicht in der Datenbank gespeichert werden. Einführung
Sie sehen dies häufig in Projekten für Projektmanagement oder Support -Management: Sie können auf E -Mails antworten und es wird automatisch in Ihrer Webanwendung angezeigt. Diese Tools können diese E -Mails direkt in ihre Systeme importieren.
In diesem Artikel lernen wir, wie Sie E -Mails an unsere Laravel 4 -Anwendung übermitteln. Dazu begannen wir mit einem brandneuen Laravel 4 -Projekt, das wie unten gezeigt über Komponisten installiert wurde.
<code class="language-bash">composer create-project laravel/laravel your-project-name --prefer-dist</code>
Erstellen Sie Artisan -Befehl
Um E -Mails in unsere Bewerbung importieren zu können, müssen wir die E -Mails über die Befehlszeile an unsere Bewerbung liefern. Glücklicherweise verfügt Laravel über ein Befehlszeilen -Tool namens Artisan, das mehrere Aufgaben ausführen kann. Um eine Liste aller Aufgaben anzuzeigen, die Artisan ausführen kann, können Sie in dem Stammverzeichnis Ihres Projekts php artisan list
ausführen.
In diesem Fall möchten wir, dass es eine ganz bestimmte Aufgabe ausführt: Akzeptieren Sie die ursprüngliche E -Mail und verwenden Sie sie in unserer Anwendung. Leider ist dies keiner der grundlegenden Merkmale, die sich mit Artisan handeln kann. Wir können es leicht mit dem neuen Befehl erweitern: php artisan email:parse
. Wir werden dann Artisan starten und in diesem Fall eine bestimmte Aufgabe namens email:parse
ausführen.
Unser erster Schritt ist, diesen Befehl zu erstellen. Sie können einen neuen Befehl über den eigenen Befehl von Artisan erstellen, um einen neuen Befehl zu erstellen. Führen Sie einfach den folgenden Befehl im Stammverzeichnis des Projekts aus:
<code class="language-bash">php artisan command:make EmailParserCommand</code>
Wenn alles gut läuft, finden Sie jetzt eine Datei mit dem Namen app/commands
im Verzeichnis EmailParserCommand.php
. Öffnen Sie es in Ihrem bevorzugten Editor und sehen Sie sich die Eigenschaften $name
und $description
an. Wir können es nach Bedarf anpassen. Indem der Befehl einen klaren Namen und eine klare Beschreibung gibt, wird der Befehl in der Handwerksbefehlsliste gut aufgeführt.
Zum Beispiel habe ich es dazu geändert:
<code class="language-php">/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';</code>
Registrierung der Reihenfolge
Wenn wir in der Stammin unseres Projekts php artisan email:parse
ausführen, erhalten Sie eine Nachricht, dass dieser Befehl noch nicht registriert wurde. Unser nächster Schritt besteht darin, sicherzustellen, dass dieser Befehl in Artisan registriert ist. Öffnen wir die Datei app/start/artisan.php
und fügen Sie Artisan::add(new EmailParserCommand);
zum Ende der Datei hinzu, um unseren neu erstellten Befehl zu registrieren. Wir können jetzt den Befehl list
erneut ausführen, um den von uns aufgeführten email:parse
-Fehl anzuzeigen. Bitte beachten Sie, dass der Name und die Beschreibung, die Sie gerade ausgefüllt haben, hier angezeigt werden.
Original -E -Mail
abrufen Wenn ein Befehl durch Handwerker aufgerufen wird, ruft er immer die fire
-Methode auf. Zunächst müssen wir hier unsere E -Mail -Parsen hinzufügen. Die E -Mail befindet sich derzeit in unserem IO -Stream und wir können sie von php://stdin
abrufen. Wir öffnen diesen IO -Stream und sammeln eine kleine Anzahl von E -Mails, bis wir den gesamten Stream lesen.
<code class="language-bash">composer create-project laravel/laravel your-project-name --prefer-dist</code>
Die E -Mail, die an unseren Handwerksbefehl gesendet wird, befindet sich jetzt in der Variablen $rawEmail
. Es ist die gesamte E -Mail mit Header, Körper und Anhängen.
Zeitplan -E -Mail
Wir haben jetzt die ursprüngliche E -Mail, aber ich bevorzuge die E -Mail in mehrere Teile. Ich möchte Header wie Themen und E -Mail -Körper abrufen. Wir können unseren eigenen Code schreiben, um alle diese Teile zu teilen, aber jemand hat ein Paket erstellt, das wir in unserer Anwendung verwenden können. Dieses Paket kann unsere gesamte E -Mail in logische Teile unterteilen. Fügen Sie der folgenden Zeile Ihrer composer.json
-Datei hinzu und führen Sie composer update
<code class="language-bash">php artisan command:make EmailParserCommand</code>
Jetzt müssen wir sicherstellen
app/command/EmailParserCommand.php
<code class="language-php">/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';</code>-Methode hinzu.
fire
<code class="language-php">/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }</code>
Sie können jetzt problemlos E -Mails in Ihrer Datenbank speichern. Wenn Sie beispielsweise eine E -Mail -Entität haben, können Sie die E -Mail in Ihrer Datenbank wie folgt speichern:
<code class="language-json">"messaged/php-mime-mail-parser": "dev-master"</code>Verarbeitungsanhänge
Möglicherweise möchten Sie sogar alle Anhänge speichern, die Ihrer E -Mail auf Ihrem Server angehängt sind. Die E -Mail -Parser -Klasse kann alle verfügbaren Anhänge verarbeiten. Fügen Sie zunächst erneut die folgenden Zeilen an die Oberseite der
-Klasse hinzu.
app/command/EmailParserCommand.php
<code class="language-php">use MimeMailParser\Parser;</code>-Methode erweitern:
<code class="language-bash">composer create-project laravel/laravel your-project-name --prefer-dist</code>
Mal sehen, was dieser Teil tatsächlich tut. Die erste Zeile holt den Anhang aus der E -Mail ab. $attachments
Eine Variable ist ein Array von Anhangsobjekten. Als nächstes stellen wir sicher, dass ein neues Dateisystemobjekt erstellt wird, das das Speichern der Datei auf unserem Server verarbeitet. Dann fangen wir an, alle Anhänge zu iterieren. Wir nennen die put
-Methode des Dateisystems Objekt, das den Pfad und den Inhalt der Datei akzeptiert. In diesem Fall möchten wir die Datei dem Verzeichnis public/uploads
hinzufügen und den Dateinamen verwenden, den der Anhang tatsächlich hat. Der zweite Parameter ist der Inhalt der tatsächlichen Datei.
Das ist es! Ihre Dateien werden jetzt in public/uploads
gespeichert. Stellen Sie einfach sicher, dass Ihr Mailserver dieses Verzeichnis tatsächlich zu Dateien hinzufügen kann, indem Sie die richtigen Berechtigungen festlegen.
Konfigurieren Sie unseren Mailserver
Bisher haben wir die gesamte App zum Abrufen, Teilen und Speichern unserer E -Mails vorbereitet. Wenn Sie jedoch nicht wissen, wie Sie die E -Mail tatsächlich an Ihren neu erstellten Kunsthandwerksbefehl senden sollen, ist dieser Code nutzlos.
Im Folgenden finden Sie verschiedene Möglichkeiten, Ihre E -Mail an Ihre Anwendung zu liefern, abhängig vom Tool oder dem von Ihnen verwendeten Mailserver. Zum Beispiel möchte ich support@peternijssen.nl
an meine App weiterleiten, die sich bei /var/www/supportcenter
befindet.
Beachten Sie, dass ich in den tatsächlichen Befehlen, die Sie unten sehen werden, jedes Mal --env=local
hinzugefügt habe, um sicherzustellen, dass Artisan wie wir auf der Entwicklungsmaschine läuft. Wenn Sie sich in einer Produktionsumgebung befinden, können Sie diesen Abschnitt löschen.
Wenn Sie CPANEL verwenden, können Sie im allgemeinen Menü auf die Weiterleitung klicken. Fügen Sie einen neuen Spediteur hinzu und definieren Sie die Adresse, die Sie an Ihre Bewerbung weiterleiten möchten. Klicken Sie auf Erweiterte Einstellungen und wählen Sie die Option Pipe to Programs aus. Im Eingangsfeld können Sie die folgende Zeile einfügen:
<code class="language-bash">php artisan command:make EmailParserCommand</code>
Beachten Sie, dass CPanel einen Pfad relativ zu Ihrem Heimverzeichnis verwendet.
Wenn auf Exim die Datei /etc/valiases/peternijssen.nl
öffnen.
Stellen Sie sicher, dass in dieser Datei die folgenden Zeilen vorhanden sind:
<code class="language-php">/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';</code>
Ausführen newaliases
, um die Alias -Datenbank wieder aufzubauen.
Auf Postfix stellen Sie sicher, dass die folgenden Zeilen in Ihrer /etc/postfix/main.cf
-Datei vorhanden sind und nicht kommentiert werden:
<code class="language-php">/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }</code>
Wenn Sie die Datei ändern müssen, laden Sie Postfix neu, indem Sie service postfix reload
ausgeführt werden.
Wir können jetzt einen neuen Alias erstellen, der an unsere Bewerbung übergeben wird.
Öffnen Sie /etc/aliases
und fügen Sie die folgende Zeile hinzu:
<code class="language-json">"messaged/php-mime-mail-parser": "dev-master"</code>
Ausführen newaliases
, um die Alias -Datenbank wieder aufzubauen.
Mit Sendmail sollten Sie zunächst einen Alias in der Datei /etc/aliases
erstellen:
<code class="language-php">use MimeMailParser\Parser;</code>
Ausführen newaliases
, um die Alias -Datenbank wieder aufzubauen. Stellen Sie als nächstes sicher, dass der Chmod der Artisan -Datei 755 ist, damit sie ausgeführt werden kann.
Symlink die handwerkliche Datei und Php selbst zu /etc/smrsh
<code class="language-bash">composer create-project laravel/laravel your-project-name --prefer-dist</code>
Abhängig von Ihrer Installation müssen Sie sicherstellen, dass die folgenden Dateien vorhanden sind:
<code class="language-bash">php artisan command:make EmailParserCommand</code>
oder:
<code class="language-php">/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';</code>
Öffnen Sie eine Datei und fügen Sie die folgende Zeile als Inhalt hinzu:
<code class="language-php">/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }</code>
Schlussfolgerung
Jedes Framework mit verfügbaren Befehlszeilen -Tools kann Ihre E -Mails verarbeiten. Der hier bereitgestellte Code ist nur ein grundlegendes Setup. Abhängig von Ihrem Projekt möchten Sie möglicherweise nur zulassen, dass bestimmte E -Mail -Adressen E -Mails an Ihre App senden. Stellen Sie vor dem Übergeben an Ihre Bewerbung sicher, dass Sie Ihre E -Mails in Tools wie Postfix gefiltert haben.
Wenn Sie eine Art Ticketing -System verwenden möchten, können Sie problemlos versuchen, eine Support -Ticket -ID aus einem E -Mail -Betreff zu extrahieren und auf der E -Mail basierend auf dieser ID mehrere verschiedene Aktionen auszuführen.
Halten Sie die Aufmerksamkeit auf die Protokolldateien des Mailservers. Es gibt Ihnen einige Tipps, wenn die tatsächliche Pipeline in der Lösung der Auflösung fehlschlägt.
(Aus Platzbeschränkungen wird ein Teil der FAQs weggelassen. Der ursprüngliche FAQs -Inhalt hängt schwach zum Thema des Artikels zusammen, und ein Teil des Inhalts wird mit dem Inhalt des Artikels dupliziert, daher kein Pseudo -Originalverarbeitung wird durchgeführt.)
Das obige ist der detaillierte Inhalt vonRohrleitungs -E -Mails an eine Laravel -Bewerbung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!