Points de base
php artisan email:parse
, qui peut être enregistrée et exécutée dans Artisan pour récupérer le message original du flux IO. php-mime-mail-parser
etc. pour résoudre le message d'origine dans une section distincte. Cela permet de récupérer des en-têtes tels que le sujet et le corps de l'e-mail. Le courrier analysé peut ensuite être facilement stocké dans la base de données. Introduction
Vous le verrez souvent dans la gestion de projet ou les outils de gestion du support: vous pouvez répondre aux e-mails et il apparaîtra automatiquement dans votre application Web. Ces outils peuvent importer ces e-mails directement dans leurs systèmes.
Dans cet article, nous apprendrons à transmettre des e-mails à notre application Laravel 4. Pour ce faire, nous avons commencé avec un tout nouveau projet Laravel 4 qui a été installé via le compositeur comme indiqué ci-dessous.
composer create-project laravel/laravel your-project-name --prefer-dist
Créer une commande artisanale
Afin de pouvoir importer des e-mails dans notre application, nous devons transmettre les e-mails à notre application via la ligne de commande. Heureusement, Laravel a un outil de ligne de commande appelé Artisan capable d'effectuer plusieurs tâches. Pour afficher une liste de toutes les tâches que Artisan peut exécuter, vous pouvez exécuter php artisan list
dans le répertoire racine de votre projet.
Dans ce cas, nous voulons qu'il effectue une tâche très spécifique: acceptez l'e-mail d'origine et l'utilisez dans notre application. Malheureusement, ce n'est pas l'une des caractéristiques de base que l'artisan peut gérer. Nous pouvons facilement l'étendre avec la nouvelle commande: php artisan email:parse
. Nous allons ensuite commencer Artisan et effectuer une tâche spécifique, appelée email:parse
dans ce cas.
Notre première étape consiste à créer cette commande. Vous pouvez créer une nouvelle commande via la propre commande d'Artisan pour créer une nouvelle commande. Exécutez simplement la commande suivante dans le répertoire racine du projet:
php artisan command:make EmailParserCommand
Si tout se passe bien, vous trouverez maintenant un fichier nommé app/commands
dans le répertoire EmailParserCommand.php
. Ouvrez-le dans votre éditeur préféré et affichez les propriétés $name
et $description
. Nous pouvons le personnaliser au besoin. En lui donnant un nom et une description clairs, la commande sera bien répertoriée dans la liste des commandes artisanales.
Par exemple, je l'ai changé pour ceci:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
Enregistrement de l'ordre
Lorsque nous exécutons php artisan email:parse
à la racine de notre projet, vous recevrez un message indiquant que cette commande n'a pas encore été enregistrée. Notre prochaine étape consiste à nous assurer que cette commande est enregistrée dans Artisan. Ouvrez le fichier app/start/artisan.php
et ajoutons Artisan::add(new EmailParserCommand);
à la fin du fichier pour enregistrer notre commande nouvellement créée. Nous pouvons maintenant exécuter à nouveau la commande list
pour afficher la commande email:parse
que nous avons répertoriée. Veuillez noter que le nom et la description que vous venez de remplir seront affichés ici.
Récupérer le courrier électronique original
Chaque fois qu'une commande est appelée via Artisan, il appelle toujours la méthode fire
. Donc, initialement, nous devons ajouter notre analyse des e-mails ici. L'e-mail est actuellement dans notre flux IO et nous pouvons le récupérer de php://stdin
. Nous ouvrons ce flux IO et collectons une petite quantité d'e-mails jusqu'à ce que nous lisons le flux entier.
composer create-project laravel/laravel your-project-name --prefer-dist
l'e-mail envoyé à notre commande artisan est maintenant situé dans la variable $rawEmail
. Il s'agit de l'ensemble de l'e-mail, contenant l'en-tête, le corps et toutes les pièces jointes.
Planifiez le courrier électronique
Nous avons maintenant l'e-mail d'origine, mais je préfère diviser l'e-mail en plusieurs parties. Je veux récupérer des en-têtes comme des sujets et un corps par e-mail. Nous pouvons écrire notre propre code pour diviser toutes ces parties, mais quelqu'un a créé un package que nous pouvons utiliser dans notre application. Ce package est capable de diviser l'intégralité de notre e-mail en parties logiques. Ajoutez la ligne suivante à votre fichier composer.json
et exécutez composer update
php artisan command:make EmailParserCommand
Maintenant, nous devons nous assurer que nous pouvons réellement utiliser ce package dans nos commandes, nous ouvrons donc notre app/command/EmailParserCommand.php
à nouveau et ajouter les lignes suivantes en haut:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
Maintenant, nous pouvons analyser l'e-mail d'origine en sections distinctes. Ajoutez les lignes de code suivantes à la fin de la méthode fire
.
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
Nous créons d'abord un nouvel analyseur. Ensuite, nous définissons l'e-mail d'origine sur le texte de l'analyseur, et enfin, nous appelons différentes méthodes pour obtenir les données de l'en-tête ou du corps.
Vous pouvez désormais stocker facilement les e-mails dans votre base de données. Par exemple, si vous avez une entité par e-mail, vous pouvez enregistrer l'e-mail dans votre base de données comme ceci:
"messaged/php-mime-mail-parser": "dev-master"
Traitement des pièces jointes
Vous pouvez même stocker toutes les pièces jointes jointes à votre e-mail sur votre serveur. La classe d'analyse par e-mail peut gérer toutes les pièces jointes disponibles. Tout d'abord, ajoutez à nouveau les lignes suivantes en haut de la classe app/command/EmailParserCommand.php
.
use MimeMailParser\Parser;
Maintenant, nous devons étendre notre méthode fire
:
composer create-project laravel/laravel your-project-name --prefer-dist
Voyons ce que fait cette partie. La première ligne récupère la pièce jointe de l'e-mail. $attachments
Une variable est un tableau d'objets d'attachement. Ensuite, nous nous assurons de créer un nouvel objet de système de fichiers qui gérera la sauvegarde du fichier sur notre serveur. Ensuite, nous commençons à itérus sur tous les accessoires. Nous appelons la méthode put
de l'objet de système de fichiers, qui accepte le chemin d'accès et le contenu du fichier. Dans ce cas, nous voulons ajouter le fichier au répertoire public/uploads
et utiliser le nom de fichier que la pièce jointe a réellement. Le deuxième paramètre est le contenu du fichier réel.
c'est tout! Vos fichiers sont maintenant stockés dans public/uploads
. Assurez-vous simplement que votre serveur de messagerie peut réellement ajouter des fichiers à ce répertoire en définissant les autorisations correctes.
Configurez notre serveur de messagerie
Jusqu'à présent, nous avons préparé l'ensemble de l'application pour récupérer, diviser et enregistrer nos e-mails. Cependant, si vous ne savez pas comment envoyer l'e-mail à votre commande Artisan nouvellement créée, ce code est inutile.
Ci-dessous, vous trouverez différentes façons de livrer des e-mails à votre application, selon l'outil ou le serveur de messagerie que vous utilisez. Par exemple, je souhaite transmettre support@peternijssen.nl
à mon application, qui est située à /var/www/supportcenter
.
Notez que dans les commandes réelles que vous verrez ci-dessous, j'ai ajouté --env=local
à chaque fois pour m'assurer que Artisan fonctionne comme nous le faisons sur la machine de développement. Si vous êtes dans un environnement de production, vous pouvez supprimer cette section.
Si vous utilisez CPanel, vous pouvez cliquer sur le transfert dans le menu général. Ajoutez un nouveau transfert et définissez l'adresse que vous souhaitez transmettre à votre application. Cliquez sur Paramètres avancés et sélectionnez l'option Pipe to Programs. Dans le champ de saisie, vous pouvez insérer la ligne suivante:
php artisan command:make EmailParserCommand
Notez que CPanel utilise un chemin par rapport à votre répertoire domestique.
Si sur exim, ouvrez le fichier /etc/valiases/peternijssen.nl
.
Assurez-vous que les lignes suivantes existent dans ce fichier:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
Exécutez newaliases
pour reconstruire la base de données Alias.
Sur PostFix, assurez-vous qu'avant de continuer, les lignes suivantes existent dans votre fichier /etc/postfix/main.cf
et ne sont pas commentées:
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
Si vous devez modifier le fichier, rechargez Postfix en exécutant service postfix reload
.
Nous pouvons maintenant créer un nouvel alias qui sera transmis à notre application.
Ouvrez /etc/aliases
et ajoutez la ligne suivante:
"messaged/php-mime-mail-parser": "dev-master"
Exécutez newaliases
pour reconstruire la base de données Alias.
Avec Sendmail, vous devez d'abord créer un alias dans le fichier /etc/aliases
:
use MimeMailParser\Parser;
Exécutez newaliases
pour reconstruire la base de données Alias. Ensuite, assurez-vous que le Chmod du fichier artisan est de 755 afin qu'il puisse être exécuté.
Enfin, systémosez le fichier artisan et php lui-même à /etc/smrsh
composer create-project laravel/laravel your-project-name --prefer-dist
Selon votre installation, vous devez vous assurer que les fichiers suivants existent:
php artisan command:make EmailParserCommand
ou:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
Ouvrez n'importe quel fichier et ajoutez la ligne suivante en tant que contenu:
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
Conclusion
Tout framework avec les outils de ligne de commande disponibles est en mesure de traiter vos e-mails. Le code fourni ici n'est qu'une configuration de base. Selon votre projet, vous souhaiterez peut-être simplement autoriser certaines adresses e-mail pour envoyer des e-mails à votre application. Avant de passer à votre demande, assurez-vous d'avoir filtré vos e-mails dans des outils comme Postfix.
Si vous souhaitez utiliser une sorte de système de billetterie, vous pouvez facilement essayer d'extraire un ID de ticket d'assistance à partir d'un sujet de messagerie et effectuer plusieurs actions différentes sur l'e-mail en fonction de cet ID.
Gardez l'attention aux fichiers journaux du serveur de messagerie. Il vous donne quelques conseils lorsque le pipeline réel échoue dans la façon de le résoudre.
(En raison des limites de l'espace, une partie de la FAQ est omise. Le contenu FAQ d'origine est faiblement lié au sujet de l'article, et une partie du contenu est dupliquée avec le contenu de l'article, donc pas de pseud -Les traitements originaux sont effectués.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!