核心要点
- Laravel 的命令行工具 Artisan 可以扩展为接收原始邮件并在应用程序中使用它。这涉及创建新的命令,例如
php artisan email:parse
,该命令可以在 Artisan 中注册并执行以从 IO 流中检索原始邮件。 - 使用
php-mime-mail-parser
等包可以将原始邮件解析为单独的部分。这允许检索邮件的主题和正文等标头。然后可以轻松地将解析后的邮件存储在数据库中。 - 此设置还可以处理邮件中的任何附件。检索附件后,可以创建文件系统对象以将文件保存在服务器上。此外,根据使用的工具或邮件服务器,可以使用不同的方法将邮件传递到应用程序。
引言
在项目管理或支持管理工具中,您会经常看到这种情况:您可以回复电子邮件,它会自动显示在 Web 应用程序中。这些工具能够将这些电子邮件直接导入其系统。
在本文中,我们将了解如何将电子邮件传递到我们的 Laravel 4 应用程序。为此,我们从一个全新的 Laravel 4 项目开始,该项目通过 Composer 安装,如下所示。
composer create-project laravel/laravel your-project-name --prefer-dist
创建 Artisan 命令
为了能够将电子邮件导入我们的应用程序,我们必须通过命令行将电子邮件传递到我们的应用程序。幸运的是,Laravel 有一个名为 Artisan 的命令行工具,它能够执行多个任务。要查看 Artisan 可以运行的所有任务的列表,您可以在项目的根目录中运行 php artisan list
。
在这种情况下,我们希望它执行一项非常具体的任务:接受原始电子邮件并在我们的应用程序中使用它。不幸的是,这不是 Artisan 可以处理的基本功能之一。我们可以使用新命令轻松扩展它:php artisan email:parse
。然后,我们将启动 Artisan 并执行特定任务,在本例中称为 email:parse
。
我们的第一步是创建此命令。您可以通过 Artisan 自己的创建新命令的命令来创建新命令。只需在项目的根目录中运行以下命令:
php artisan command:make EmailParserCommand
如果一切顺利,您现在将在 app/commands
目录中找到一个名为 EmailParserCommand.php
的文件。在您喜欢的编辑器中打开它,并查看 $name
和 $description
属性。我们可以根据需要自定义它。通过为其提供清晰的名称和描述,该命令将在 Artisan 命令列表中很好地列出。
例如,我将其更改为此:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
注册命令
当我们在项目的根目录中运行 php artisan email:parse
时,您将收到一条消息,指出此命令尚未注册。我们的下一步是确保此命令在 Artisan 中注册。让我们打开 app/start/artisan.php
文件,并将 Artisan::add(new EmailParserCommand);
添加到文件的末尾以注册我们新创建的命令。我们现在可以再次运行 list
命令来查看我们列出的 email:parse
命令。请注意,您刚刚填写的名称和描述将在此处显示。
检索原始电子邮件
每当通过 Artisan 调用命令时,它总是会调用 fire
方法。因此,最初我们必须在此处添加我们的电子邮件解析。电子邮件当前位于我们的 IO 流中,我们可以从 php://stdin
中检索它。我们打开此 IO 流,然后收集少量电子邮件,直到我们读取整个流。
composer create-project laravel/laravel your-project-name --prefer-dist
发送到我们的 Artisan 命令的电子邮件现在位于 $rawEmail
变量中。它是整个电子邮件,包含标头、正文和任何附件。
解析电子邮件
我们现在有了原始电子邮件,但我更希望将电子邮件分成多个部分。我想检索诸如主题和邮件正文之类的标头。我们可以编写我们自己的代码来分割所有这些部分,但有人已经创建了一个我们可以在我们的应用程序中使用的包。此包能够将我们的整个电子邮件分成逻辑部分。将以下行添加到您的 composer.json
文件中并运行 composer update
php artisan command:make EmailParserCommand
现在我们需要确保我们实际上可以在我们的命令中使用此包,因此我们再次打开我们的 app/command/EmailParserCommand.php
,并将以下几行添加到顶部:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
现在我们可以将原始电子邮件解析为单独的部分。将以下几行代码添加到 fire
方法的末尾。
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
我们首先创建一个新的解析器。接下来,我们将原始电子邮件设置为解析器的文本,最后,我们调用各种不同的方法来从标头或正文中获取数据。
您现在可以轻松地将电子邮件存储在数据库中。例如,如果您有一个电子邮件实体,您可以像这样将电子邮件保存到您的数据库:
"messaged/php-mime-mail-parser": "dev-master"
处理附件
您甚至可能希望将附加到电子邮件的任何附件存储在您的服务器上。电子邮件解析器类可以处理任何可用的附件。首先,再次将以下几行添加到 app/command/EmailParserCommand.php
类的顶部。
use MimeMailParser\Parser;
现在我们必须用一些将处理附件的代码扩展我们的 fire
方法:
composer create-project laravel/laravel your-project-name --prefer-dist
让我们看看这部分实际上做了什么。第一行从电子邮件中检索附件。$attachments
变量是一个附件对象的数组。接下来,我们确保创建了一个新的 FileSystem 对象,它将处理在我们的服务器上保存文件。然后我们开始迭代所有附件。我们调用 FileSystem 对象的 put
方法,它接受文件的路径和内容。在这种情况下,我们想将文件添加到 public/uploads
目录并使用附件实际具有的文件名。第二个参数是实际文件的内容。
就是这样!您的文件现在存储在 public/uploads
中。只需确保您的邮件服务器可以通过设置正确的权限来实际将文件添加到此目录。
配置我们的邮件服务器
到目前为止,我们已经准备好了整个应用程序来检索、分割和保存我们的电子邮件。但是,如果您不知道如何将电子邮件实际发送到您新创建的 Artisan 命令,则此代码毫无用处。
下面您将找到将电子邮件传递到您的应用程序的不同方法,具体取决于您使用的工具或邮件服务器。例如,我想将 support@peternijssen.nl
转发到我的应用程序,该应用程序位于 /var/www/supportcenter
。
请注意,在下面您将看到的实际命令中,我每次都添加了 --env=local
,以确保 Artisan 的运行方式就像我们在开发机器上一样。如果您处于生产环境中,则可以删除此部分。
CPanel
如果您使用的是 CPanel,您可以点击常规菜单中的转发器。添加一个新的转发器并定义您想转发到您的应用程序的地址。单击高级设置并选择管道到程序选项。 在输入字段中,您可以插入以下行:
php artisan command:make EmailParserCommand
请注意,CPanel 使用相对于您的主目录的路径。
Exim
如果在 Exim 上,请打开文件 /etc/valiases/peternijssen.nl
。
确保此文件中存在以下行:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
运行 newaliases
以重建别名数据库。
Postfix
在 Postfix 上,请确保在继续之前,以下几行存在于您的 /etc/postfix/main.cf
文件中并且未被注释:
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
如果您必须更改文件,请通过运行 service postfix reload
来重新加载 postfix。
我们现在可以创建一个新的别名,它将被传递到我们的应用程序。
打开 /etc/aliases
并添加以下行:
"messaged/php-mime-mail-parser": "dev-master"
运行 newaliases
以重建别名数据库。
Sendmail
使用 Sendmail,您应该首先在 /etc/aliases
文件中创建一个别名:
use MimeMailParser\Parser;
运行 newaliases
以重建别名数据库。接下来,确保 Artisan 文件的 chmod 为 755,以便可以执行。
最后,将 artisan 文件和 php 本身符号链接到 /etc/smrsh
composer create-project laravel/laravel your-project-name --prefer-dist
QMail
根据您的安装情况,您必须确保存在以下文件:
php artisan command:make EmailParserCommand
或:
/** * 控制台命令名称。 * * @var string */ protected $name = 'email:parse'; /** * 控制台命令描述。 * * @var string */ protected $description = '解析传入的电子邮件。';
打开任一文件并将以下行添加为内容:
/** * 执行控制台命令。 * * @return void */ public function fire() { // 从 stdin 读取 $fd = fopen("php://stdin", "r"); $rawEmail = ""; while (!feof($fd)) { $rawEmail .= fread($fd, 1024); } fclose($fd); }
结论
任何具有可用命令行工具的框架都能够处理您的电子邮件。此处提供的代码只是一个基本设置。根据您的项目,您可能只想允许某些电子邮件地址向您的应用程序发送电子邮件。在传递到您的应用程序之前,请确保您已经在 postfix 等工具中过滤了电子邮件。
如果您想使用某种票务系统,您可以轻松尝试从电子邮件主题中提取支持票证 ID,并根据该 ID 对电子邮件执行多个不同的操作。
密切关注邮件服务器的日志文件。当实际管道在如何解决它方面失败时,它会为您提供一些提示。
(由于篇幅限制,FAQs部分略去。 原FAQs内容与文章主题关联性较弱,且部分内容与文章内容重复,故不进行伪原创处理。)
以上是将电子邮件提供给Laravel应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

Laravel框架的Storage::download方法提供了一个简洁的API,用于安全地处理文件下载,同时管理文件存储的抽象。 以下是一个在示例控制器中使用Storage::download()的例子:

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

Laravel的服务容器和服务提供商是其架构的基础。 本文探讨了服务容器,详细信息服务提供商创建,注册,并通过示例演示了实际用法。 我们将从OVE开始


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver Mac版
视觉化网页开发工具