轻松的电子邮件归档:使用Laravel IMAP保存在服务器上发送的电子邮件
#php #laravel #email #imap
与Laravel一起发送电子邮件确实是最简单的事情之一。例如,发送密码重置或激活帐户,但是有时,您想向用户发送电子邮件并为此留下来。为了这样做,您有2个选项,可以将电子邮件存储在数据库中,或将其保存在IMAP服务器上。
在本教程中,我们将看到第二个选项,将已发送的电子邮件附加到IMAP服务器。因此,让我们开始。

注意: :本教程将假定您已经安装了Laravel。

composer require webklex/laravel-imap
打开.env文件后,将以下代码粘贴到文件末尾。

IMAP_HOST="imaphost"
IMAP_PORT="993"
IMAP_ENCRYPTION="ssl"
IMAP_VALIDATE_CERT="true"
IMAP_USERNAME="email"
IMAP_PASSWORD="password"
IMAP_DEFAULT_ACCOUNT=default
IMAP_PROTOCOL=imap

然后根据您的配置更改值。

下一步是生成一个可邮寄的邮件,这样我们就可以发送它,只需运行此命令:

php artisan make:mail TestMail

此命令将生成一个名为TestMail.php的新的可邮递类。
您现在需要做的就是打开文件并进行编辑(主要调整视图名称)。

注意: :您可以看到有关使用Laravel发送电子邮件的其他教程。
现在,在所有内容都到位之后,现在我们将尝试将电子邮件发送并将其保存在IMAP服务器上。

因此,要发送电子邮件,您需要做的就是以下

$mail = Mail::to('hello@gmail.com')->send(new TestMail());

请注意,我们将结果保存在$mail变量中,因为我们将使用它来存储已发送的电子邮件。
发送电子邮件后,我们需要立即连接到IMAP服务器。

$client = Client::account('default');
$client->connect();
$folder = $client->getFolderByName('Sent');

上面的代码将尝试使用我们之前在.env文件中放置的凭据连接到IMAP服务器。建立连接后,我们将检索Sent文件夹。

注意: :发送的文件夹名称通常为Sent,这取决于您的IMAP配置。

成功获取文件夹后,我们现在需要的只是使用appendMessage方法。

$result = $folder->appendMessage($mail->getSymfonySentMessage()->toString(), ['\Seen'], now()->format("d-M-Y h:i:s O"));

现在让我们分解此方法,然后查看:
第一个参数是字符串格式的消息。
$mail变量将是SymfonySentMessage类型,因此它具有称为getSymfonySentMessage()->toString()的方法,此方法将返回消息的字符串格式。
这是结果的一个例子:

From: Laravel <hello@example.com>
To: hello@gmail.com
Subject: Test Mail
Message-ID: <1259c22f78de504c28beabdb9eda5636@example.com>
MIME-Version: 1.0
Date: Sun, 11 Jun 2023 13:37:36 +0000
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

HELLO WORLD

使用此字符串,我们将能够附加发送消息,

第二个参数是标志,在此示例中,我们将使用seen标志,因此将在IMAP上看到。您可以在此RFC 2060

上了解有关标志的更多信息

最后,日期,我们将使用它来指示何时将此消息保存在IMAP上。

最后,我们将检查appendMessage方法的结果。
结果将是类似的

'OK [APPENDUID 1655722943 20] Append completed (0.018 + 0.135 + 0.016 secs)';

如果您有此字符串,那么一切都还好。

我希望您喜欢本教程,并获得有关它的信息。
如果您不清楚或您想询问更多信息,则可以通过Twitter与我联系或在下面发表评论。
再次感谢您,祝您有美好的一天。