diff --git a/README.md b/README.md index 20384559ad90d499ad418d2d6c8f9a34829d8757..64bb577ffdad04db514458d9d17bf180ab02537d 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ Pour soutenir le créateur de ce projet libre, vous pouvez faire un don sur Patr ## Derniers ajouts + - paramètrer son propre serveur d'envoie pour le formulaire de contact (pour les instances auto-hébergés) - formulaire d'initialisation pour l'installation sous la forme d'un standalone sur un serveur perso - menu qui réapparaît lorsqu'on scroll vers le haut - petits bugs corrigés @@ -183,6 +184,15 @@ Il faut activer votre site dans Nginx : service php7.0-fpm restart service nginx restart +## Configuer un serveur d'envoie pour le formulaire de contact + +Éditer le fichier `/chemain/vers/votre/installation/app/config/config.ini` et fournir les adéquat dans la section `[SMTP]` : + + - `HOST` : Nom d'hôte du serveur smpt à utiliser pour l'envoie du courriel. + - `User` : Nom d'utilisateur pour s'autentifier au serveur smtp (est aussi l'adresse d'envoie). + - `Password` : Mot de de passe pour l'authentification au serveur smtp. + - `Port` : Port utilisé pour l'envoie de courriel. + ## Contribuer Les Merges requests sont les bienvenues, et le bug report et les suggestions sont très appréciés diff --git a/app/config/config.ini b/app/config/config.ini index 939116d8855287edb242d813e39f377ef626631a..75d39d707a36826c312325f8ecb6a9bd8688a07b 100644 --- a/app/config/config.ini +++ b/app/config/config.ini @@ -4,4 +4,12 @@ UI=app/views/ AUTOLOAD=app/controllers/;app/fixtures/ SitesFolder = sites/ isMediaPathModified = true - +# Mail configuration for sending mail with contact form +[SMTP] +Host="smtp.my-mail-server.tld" +# Used for authentification and From field +User="my-account@my-mail-server.tld" +Password="my-secret-password" +Port="587" +# SSL or TSL (see https://fatfreeframework.com/3.6/smtp#__construct) +Security="TLS" diff --git a/app/controllers/ShowcaseController.php b/app/controllers/ShowcaseController.php index e6eeeb940ba7e7b782b7300f91a3575b58b1b471..24da0e91eeab2fc7b2503de78f14ac026ec0c0a3 100644 --- a/app/controllers/ShowcaseController.php +++ b/app/controllers/ShowcaseController.php @@ -115,34 +115,52 @@ class ShowCaseController extends Controller // public function contact() { + // SMTP Sender configuration + $smtpHost = $this->f3->get('SMTP.Host'); + $smtpPort = $this->f3->get('SMTP.Port'); + $smtpSecu = $this->f3->get('SMTP.Security'); + $smtpUser = $this->f3->get('SMTP.User'); + $smtpPasswd = $this->f3->get('SMTP.Password'); + $sender = new SMTP ($smtpHost, $smtpPort, $smtpSecu, $smtpUser, $smtpPasswd); + $sectionId = $this->getSafePOST('sectionId'); $mail = $this->getSafePOST('email'); - $objet=$this->getSafePOST('title'); - $message = $this->getSafePOST('content'); + // $objet=$this->getSafePOST('title'); // not implemented + $message = nl2br($this->getSafePOST('content')); $noRobot = $this->getSafePOST('no-robot'); $nom = $this->getSafePOST('name'); + $siteName = $this->db->read('siteOptions.json')['params']['title']; + if ($noRobot === '4' || $noRobot === 'quatre') { + $siteStructure = $this->getSiteStructure(); $section = array_pop(array_filter($siteStructure, function ($elem) use ($sectionId) { return $elem["id"] === $sectionId; })); - $destinataire = htmlentities($section['fields']['email']['value']); - $subject = '=?UTF-8?B?' . base64_encode('Nouveau contact de '. $this->siteName . ' : ' .$objet).'?='; // Titre de l'email - $contenu = '' . 'Nouveau contact de ' . $this->siteName . ''; - $contenu .= '

Bonjour, vous avez reçu un message à partir de votre site web ' . strtoupper($this->siteName) . '

'; - $contenu .= '

Nom: ' . $nom . '

'; - $contenu .= '

Email: ' . $mail . '

'; - $contenu .= '

Message: ' . $message . '

'; - $contenu .= ''; // Contenu du message de l'email (en HTML) - - $headers = 'MIME-Version: 1.0' . "\r\n"; - $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n"; - $headers .= "Content-Transfer-Encoding: 8bit\r\n"; - - ////ici on détermine l'expediteur et l'adresse de réponse - $headers.= "From: Framasite \r\nReply-to: ". '"' . mb_encode_mimeheader(html_entity_decode($nom)). '" <'.$mail.">\r\nX-Mailer: PHP\r\n"; - if (mail($destinataire, $subject, $contenu, $headers)) { + + // Setup email header + $sender->set('To', $section['fields']['email']['value']); + $sender->set('Subject', 'Contacte depuis le formulaire de votre site '. $siteName ); + $sender->set('Content-type', 'text/html; charset=UTF-8'); + // ici on détermine l'expediteur et l'adresse de réponse + $sender->set('From', '"Contact'. $siteName .'" <'.$smtpUser.'>'); + $sender->set('Reply-to', '"'. html_entity_decode($nom) .'" <'. $mail .'>'); + $sender->set('X-Mailer', 'PHP'); + // Contenu du message de l'email (en HTML) + $contenu = <<Nouveau contact de $this->siteName +

Bonjour, vous avez reçu un message à partir de votre site web ${strtoupper($this->siteName)}

+

Nom: $nom

+

Email: $mail

+

Message:

+

$message

+ +EOT; + if ($sender->send($contenu, True)) { + // If need to debug + //$mylogger = new log('mail.log'); + //$mylogger->write($sender->log()); $this->f3->reroute('/'); } else { $this->f3->reroute('error');