Maison > développement back-end > tutoriel php > Piping des e-mails à une application Laravel

Piping des e-mails à une application Laravel

Joseph Gordon-Levitt
Libérer: 2025-02-22 10:34:10
original
594 Les gens l'ont consulté

Piping Emails to a Laravel Application

Points de base

  • L'artisan de l'outil de ligne de commande de Laravel peut être étendu pour recevoir du courrier brut et l'utiliser dans votre application. Cela implique la création d'une nouvelle commande, telle que 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.
  • Utiliser 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.
  • Ce paramètre peut également gérer toutes les pièces jointes dans le message. Après la récupération des pièces jointes, vous pouvez créer un objet système de fichiers pour enregistrer le fichier sur le serveur. De plus, selon l'outil ou le serveur de messagerie utilisé, différentes méthodes peuvent être utilisées pour livrer le courrier à l'application.

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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 = '解析传入的电子邮件。';
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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 = '解析传入的电子邮件。';
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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);
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

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"
Copier après la connexion
Copier après la connexion

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;
Copier après la connexion
Copier après la connexion

Maintenant, nous devons étendre notre méthode fire:

composer create-project laravel/laravel your-project-name --prefer-dist
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

cpanel

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Notez que CPanel utilise un chemin par rapport à votre répertoire domestique.

exim

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 = '解析传入的电子邮件。';
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exécutez newaliases pour reconstruire la base de données Alias.

postfix

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);
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

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"
Copier après la connexion
Copier après la connexion

Exécutez newaliases pour reconstruire la base de données Alias.

sendmail

Avec Sendmail, vous devez d'abord créer un alias dans le fichier /etc/aliases:

use MimeMailParser\Parser;
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

qmail

Selon votre installation, vous devez vous assurer que les fichiers suivants existent:

php artisan command:make EmailParserCommand
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

ou:

/**
 * 控制台命令名称。
 *
 * @var string
 */
protected $name = 'email:parse';

/**
 * 控制台命令描述。
 *
 * @var string
 */
protected $description = '解析传入的电子邮件。';
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

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);
}
Copier après la connexion
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal