So first you have to run a artisan command for create mail file.
php artisan make:mail TestMail
After that there will create a php file on -
app\Mail\TestMail.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class TestMail extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Get the message envelope.
*
* @return \Illuminate\Mail\Mailables\Envelope
*/
public function envelope()
{
return new Envelope(
subject: 'Your Company Account Created Successfully!',
);
}
/**
* Get the message content definition.
*
* @return \Illuminate\Mail\Mailables\Content
*/
public function content()
{
return new Content(
view: 'mails.test_mail',
);
}
/**
* Get the attachments for the message.
*
* @return array
*/
public function attachments()
{
return [];
}
}
Here you can pass data using __constructor()
function.
Now another command for create a controller for call this mail.
php artisan make:controller TestMailController
Then it will create a controller on -
app\Http\Controllers\TestMailController.php
Add this to your email controller. Here you get $data array. You now can pass all of your data for sending through email.
//Use this on top
use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;
//Use this on Controller
$data = [
'name' => "Arman Rahman",
];
$mail = new TestMail($data);
Mail::to($user->email)->send($mail);
Then create blade file with your email html template.
resources\views\mails\test_mail.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Test Mail</title>
<style>
body {
color: red;
}
</style>
</head>
<body>
<p>Hello {{ $data['name'] }}!!</p>
</body>
</html>
Your Basic Setup is now finished. Now set your .env file.
MAIL_MAILER=smtp
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=
MAIL_FROM_ADDRESS=
MAIL_FROM_NAME="${APP_NAME}"
Create Your company email with Cpanel
Create Email From Cpanel:
Click On Connect Device:
After That Get your mail confederation details from here:
Fill your .env Like this:
MAIL_MAILER=smtp
MAIL_HOST= [Incoming Server: mail.yourdomain.com]
MAIL_PORT= [Outgoing Server: SMTP Port: 465]
MAIL_USERNAME= [Username: youremail@yourdomain.com]
MAIL_PASSWORD= [Password: Your Email Password]
MAIL_ENCRYPTION= ssl
MAIL_FROM_ADDRESS= [Username: youremail@yourdomain.com]
MAIL_FROM_NAME="${APP_NAME}"
You can easily use this link to generate this code easily: https://helloarman.github.io/laravel-smtp
Now write your logic on controller and send mail.
Top comments (1)
Thank you for covering both the technical implementation and the necessary configuration; it is much appreciated! If you require more advanced email functionality, you can seamlessly integrate Mailtrap with Laravel. Here's a guide on the setup process and the advantages of integrating Mailtrap into a Laravel application