Sending emails with Laravel is really one of the easiest things to do. For example, sending password resets, or account activation, but sometimes, you want to send emails to your users and leave a trail for that. In order to do so, you have 2 options, either storing the email in the database, or save it on the IMAP server.
In this tutorial we will see the second option, append the sent email to the IMAP server. So let's get started.
NOTE: : This tutorial will assume you have a Laravel installation in place already.
The first thing to do is to install
composer require webklex/laravel-imap
After installing it, we will set up the IMAP credentials in our
After opening the
.env file, paste the following code at the end of the file.
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
Then change the values in according to your configuration.
The next step is to generate a Mailable so we can send it, to do so, just run this command:
php artisan make:mail TestMail
This command will generate a new mailable class called
All you need to do now is open the file and edit it (mainly adjust the view name).
NOTE: : You can see other tutorials about sending emails using Laravel.
Now after everything is in place, now we will try to send the email and save it on the IMAP server.
So to send the email, all you need to do is the following
$mail = Mail::to('firstname.lastname@example.org')->send(new TestMail());
Note here, we saved the result in the
After the email was sent, we need to connect to our IMAP server now.
$client = Client::account('default'); $client->connect(); $folder = $client->getFolderByName('Sent');
The code above will try to connect to the IMAP server using the credentials we put earlier in the
.env file. After the connection has been made, we will retrieve the
NOTE: : The sent folder name is usually
Sent, this depends on your IMAP configuration.
After successfully getting the folder, all we need now is to append it, by using the
$result = $folder->appendMessage($mail->getSymfonySentMessage()->toString(), ['\Seen'], now()->format("d-M-Y h:i:s O"));
Now let's break down this method, and see:
The first parameter, is the message in a string format.
SymfonySentMessage type, so it has a method called
getSymfonySentMessage()->toString(), this method will return the string format of the message.
This is an example of the result:
From: Laravel <email@example.com> To: firstname.lastname@example.org Subject: Test Mail Message-ID: <email@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
Using this string, we will be able to append the sent message,
The second parameter is the flag, in this example, we will use the
seen flag, so it will be seen on the IMAP. You can learn more about flags on this RFC 2060
And finally, the date, we will use that to indicate when this message will be saved at IMAP.
Finally, we will check the result of the
The result will be something like that
'OK [APPENDUID 1655722943 20] Append completed (0.018 + 0.135 + 0.016 secs)';
If you have this string, then everything went okay.
I hope you liked this tutorial, and you gain information about it.
If something is not clear or you want ask about further information, you can contact me on Twitter or comment down below.
Thank you again and have a nice day.