将电子邮件提供给Laravel应用程序
核心要点
- 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。
