Aller au contenu principal

Emailing

Configuration

Comme vu dans l'installation pour la configuration des valeurs du serveur de mail. Sinon il suffit d'ajouter cela au fichier .env.

.env
### SETTINGS EMAIL ###

HOST_MAIL=YOUR_HOST_EMAIL
USER_MAIL=YOUR_USER_EMAIL
PASSWORD_MAIL=YOUR_PASSWORD_EMAIL
PORT_MAIL=YOUR_PORT_EMAIL
EMAIL_SENT_FROM=YOUR_EMAIL_TO_SEND

Une fois la configuration faite nous pouvons nous penché sur le fichier qui gère l'envoi de mail avec PHPMailer dans le fichier app/Models/Mail.php

app/Models/Mail.php
namespace App\Models;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class Mail
{
protected $email;

public function __construct()
{
$this->email = new PHPMailer();
$this->email->isSMTP();
$this->email->Host = env('HOST_MAIL');
$this->email->SMTPAuth = true;
$this->email->Username = env('HOST_MAIL');
$this->email->Password = env('PASSWORD_MAIL');
$this->email->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$this->email->Port = env('PORT_MAIL');
}

public function send($emailTo, $subject, $body)
{
try {
$this->email->setFrom(env('EMAIL_SENT_FROM'));
$this->email->addAddress($emailTo);

$this->email->isHTML(true);
$this->email->Subject = $subject;
$this->email->Body = $body;

$this->email->send();
return true;
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$this->email->ErrorInfo}";
}
}
}

Nous pouvons donc envoyer un mail directement depuis le controller en appelant le Model Mail, grâce au constructeur de ce dernier la connexion à votre serveur de mail se fait automatiquement et nous pouvons envoyer un mail avec la méthode send(). Il faut renseigner le mail du réceptionneur, l'objet du mail, et son body qui peut être un fichier html stocké dans template/mail/.

namespace App\Controllers;

use App\Controllers\Controller;
use App\Models\Mail;
use App\Models\User;

class UserController extends Controller
{
private $userModel;

public function __construct()
{
$this->userModel = new User();
}

public function getUser(int $id_user)
{
$user = $this->userModel->getUserById($id_user);

$subject = 'Demande de contact';
$body = $this->twig->render('mail/demande_paiement.html.twig', ['name' => $user['name']]);

$email = new Mail();
$email->send($user['email'], $subject, $body);

return view('pages/user/detail.php', [
'user' => $user
]);
}
}