recherche
Maisondéveloppement back-endtutoriel phpPiping des e-mails à une application Laravel

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

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.

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

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 = '解析传入的电子邮件。';

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);
}

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.

sendmail

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

qmail

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!

Déclaration
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
Comment PHP identifie-t-il la session d'un utilisateur?Comment PHP identifie-t-il la session d'un utilisateur?May 01, 2025 am 12:23 AM

Phpidentifiesauser'sessionusingssse cookiesand sessionids.1) whenSession_start () est calculé, phpgeneratesauquesseSessionIdStoredInacookIenameDPhpSesssIdonUser'sbrowser.2) thisIdallowsphptoreTrrieSeSessionDatafromTeserver.

Quelles sont les meilleures pratiques pour sécuriser les séances PHP?Quelles sont les meilleures pratiques pour sécuriser les séances PHP?May 01, 2025 am 12:22 AM

La sécurité des sessions PHP peut être obtenue grâce aux mesures suivantes: 1. Utilisez Session_RegeReate_ID () pour régénérer l'ID de session lorsque l'utilisateur se connecte ou est une opération importante. 2. Cryptez l'ID de session de transmission via le protocole HTTPS. 3. Utilisez session_save_path () pour spécifier le répertoire sécurisé pour stocker les données de session et définir correctement les autorisations.

Où les fichiers de session PHP sont-ils stockés par défaut?Où les fichiers de session PHP sont-ils stockés par défaut?May 01, 2025 am 12:15 AM

PhpSessionFilesArestorentheDirectorySpecifiedSession.save_path, généralement / tmponunix-likesystemsorc: \ windows \ temponwindows.tocustomzethis: 1) usession_save_path () tosetacustomDirectory, astumeit'swrit

Comment récupérer les données d'une session PHP?Comment récupérer les données d'une session PHP?May 01, 2025 am 12:11 AM

ToretrrievedatafromaphpSession, startTheSessionwithSession_start () et accessvariablesInthe $ _sessionArray.forexample: 1) startTheSession: session_start (). 2) récupéré: $ username = $ _ session ['userSeger']; echo "bienvenue,". $ Username;..

Comment pouvez-vous utiliser des sessions pour mettre en œuvre un panier?Comment pouvez-vous utiliser des sessions pour mettre en œuvre un panier?May 01, 2025 am 12:10 AM

Les étapes pour construire un système de panier d'achat efficace à l'aide de sessions comprennent: 1) Comprendre la définition et la fonction de la session. La session est un mécanisme de stockage côté serveur utilisé pour maintenir l'état de l'utilisateur entre les demandes; 2) Implémenter la gestion de session de base, comme l'ajout de produits au panier; 3) développer une utilisation avancée, soutenant la gestion de la quantité de produits et la suppression; 4) Optimiser les performances et la sécurité, en persistant les données de session et en utilisant des identifiants de session sécurisés.

Comment créez-vous et utilisez-vous une interface dans PHP?Comment créez-vous et utilisez-vous une interface dans PHP?Apr 30, 2025 pm 03:40 PM

L'article explique comment créer, mettre en œuvre et utiliser des interfaces dans PHP, en se concentrant sur leurs avantages pour l'organisation du code et la maintenabilité.

Quelle est la différence entre crypte () et mot de passe_hash ()?Quelle est la différence entre crypte () et mot de passe_hash ()?Apr 30, 2025 pm 03:39 PM

L'article traite des différences entre crypt () et mot de passe_hash () dans PHP pour le hachage de mot de passe, en se concentrant sur leur implémentation, leur sécurité et leur aptitude aux applications Web modernes.

Comment pouvez-vous prévenir les scripts inter-sites (XSS) en PHP?Comment pouvez-vous prévenir les scripts inter-sites (XSS) en PHP?Apr 30, 2025 pm 03:38 PM

L'article discute de la prévention des scripts inter-sites (XSS) dans PHP par validation d'entrée, en codage de sortie et en utilisant des outils comme OWASP ESAPI et Purificateur HTML.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.