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
]);
}
}