summaryrefslogtreecommitdiff
path: root/src/controller/EmailController.php
blob: 1eea25758dad2b743ce6e534bf11063b928af7b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
// src/controller/EmailController.php

declare(strict_types=1);

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use App\Entity\Email;
use Doctrine\ORM\EntityManager;

class EmailController
{
	static public function send(string $recipient, bool $true_email, string $name = '', string $email = '', string $message = ''): bool
	{
		$mail = new PHPMailer(true); // true => exceptions
	    $mail->CharSet = 'UTF-8';

	    try{
	        // Paramètres du serveur
	        $mail->isSMTP();
	        $mail->Host = Config::$smtp_host;
	        $mail->SMTPAuth = true;
	        $mail->Port = 25;
	        
	        if($mail->SMTPAuth){
	        	$mail->Username = Config::$smtp_username; // e-mail
	        	$mail->Password = Config::$smtp_password;
	        	$mail->SMTPSecure = Config::$smtp_secure; // tls (starttls) ou ssl (smtps)
	        	if($mail->SMTPSecure === 'tls'){
	        		$mail->Port = 587;
	        	}
	        	elseif($mail->SMTPSecure === 'ssl'){
	        		$mail->Port = 465;
	        	}
	        }
	        //var_dump($mail->smtpConnect());die; // test de connexion

	        // Expéditeur et destinataire
	        $mail->setFrom(strtolower(Config::$email_from), Config::$email_from_name); // expéditeur
	        $mail->addAddress(strtolower($recipient), Config::$email_dest_name); // destinataire

	        // Contenu
	        $mail->isHTML(true);
	        if($true_email){
		        $mail->Subject = 'Message envoyé par: ' . $name . ' (' . $email . ') depuis le site web';
		        
		    }
		    else{
		        $mail->Subject = "TEST d'un envoi d'e-mail depuis le site web";
		    }
		    $mail->Body = $message;
		    $mail->AltBody = $message;

	        $mail->send();
	        return true;
	    }
	    catch(Exception $e){
	    	return false;
	        //echo "Le message n'a pas pu être envoyé. Erreur : {$mail->ErrorInfo}";
	    }
	}

	static public function submit(array $json, EntityManager $entityManager): void
	{
		$captcha_solution = (isset($_SESSION['captcha']) && is_int($_SESSION['captcha'])) ? $_SESSION['captcha'] : 0;
		$captcha_try = isset($json['captcha']) ? Captcha::controlInput($json['captcha']) : 0;

		// contrôles des entrées
		$name = htmlspecialchars(trim($json['name']));
		$email = strtolower(htmlspecialchars(trim($json['email'])));
		$message = htmlspecialchars(trim($json['message']));

		// destinataire = e-mail par défaut dans config.ini OU choisi par l'utilisateur
		$form_data = $entityManager->find('App\Entity\NodeData', $json['id']);
		$recipient = $form_data->getData()['email'] ?? Config::$email_dest;
		
		if($captcha_try != 0 && $captcha_solution != 0 && ($captcha_try === $captcha_solution)
			&& filter_var($email, FILTER_VALIDATE_EMAIL) && isset($json['hidden']) && empty($json['hidden'])
			&& self::send($recipient, true, $name, $email, $message))
		{
			$db_email = new Email($email, Config::$email_dest, $message);
	        $entityManager->persist($db_email);
	        $entityManager->flush();
			echo json_encode(['success' => true]);
		}
		else{
			echo json_encode(['success' => false]);
		}
		die;
	}
}