Mon blog tout fraichement migré sur pelican, il m'a fallu un formulaire d'email. Le site étant dans un chroot, et ne souhaitant pas y installer sendmail ...
Mon blog tout fraichement migré sur pelican, il m'a fallu un formulaire d'email.
Le site étant dans un chroot, et ne souhaitant pas y installer sendmail, j'ai choisi d'utiliser la class Mail de PEAR.
Pour commencer, le formulaire de contact au format markdown.
Fichier /nyx_cx/content/pages/contact.md
Title: Nos coordonnées
Date: 1970-01-01
Category: nyx-network
Author: nyx-network
save_as: contact.html
<div class="contact">
<strong>Nyx-Network</strong><br />
182 rue Carnot<br />
30600 Vauvert, France<br />
<br />
<span class="fa fa-phone fa-center"></span>+33 972 448 899<br />
<span class="fa fa-mobile fa-center"></span>+33 649 982 278<br />
<br />
<h1 class="content-subhead">Contactez-nous par email</h1>
<form class="pure-form pure-form-stacked" action="/api/contact.php" method="post">
<fieldset class="pure-group">
<input type="text" name="firstname" id="firstname" placeholder="Prénom">
<input type="text" name="name" id="name" placeholder="Nom">
<input type="email" name="email" id="email" placeholder="Adresse email" required>
</fieldset>
<fieldset>
<input type="text" class="pure-input-1" name="subject" placeholder="Sujet">
<textarea class="pure-input-1" name="message" placeholder="Votre message ..."></textarea>
</fieldset>
<button type="submit" class="pure-button pure-button-primary">Envoyer</button>
</form>
</div>
<script>
if(window.location.href.indexOf("#confirm-true") != -1) alert("Votre message a été envoyé.");
if(window.location.href.indexOf("#confirm-false") != -1) alert("Une erreur est survenue.");
</script>
Et le code php pour envoyer l'email.
Fichier /nyx_cx/content/api/contact.php
<?php
include("Mail.php");
$params["host"] = "127.0.0.1";
$params["port"] = "25";
$name = (empty($_POST['name'])) ? "none" : utf8_decode($_POST['name']);
$firstname = (empty($_POST['firstname'])) ? "none" : utf8_decode($_POST['firstname']);
$email = (empty($_POST['email'])) ? "none" : utf8_decode($_POST['email']);
$subject = (empty($_POST['subject'])) ? "Contact nyx.cx" : utf8_decode($_POST['subject']);
$message = (empty($_POST['message'])) ? "none" : utf8_decode($_POST['message']);
$recipients="none@none";
$headers["To"]="\"none\" <none@none>";
$headers["From"]="\"none\" <none@none>";
$headers["Subject"]=$subject;
$body="Nom : $name\nPrenom : $firstname\nEmail : $email\nSujet : $subject\nMessage : \n$message\n";
if($email != "none") {
$mail_object =& Mail::factory("smtp", $params);
$mail = $mail_object->send($recipients, $headers, $body);
if (PEAR::isError($mail)) { header('Location: /contact.html#confirm-false'); }
else { header('Location: /contact.html#confirm-true'); }
}
else { header('Location: /contact.html#confirm-false'); }
?>
Il vous faut rajouter la ligne suivante dans pelicanconf.py afin de ne pas parser le fichier contact.php lors du publish.
STATIC_PATHS = ['api']
Ainsi que mettre en place PEAR dans le chroot.
aptitude install php-mail
rsync -avHP --delete /usr/share/php/ /{chroot directory}/usr/share/php/
2 commentaire(s) pour Formulaire d'email, chroot et pelican
Nicolas K.
Posté le
C'est quand même dommage que ça nécessite du PHP, on perd un des intérêt du site statique. Visiblement il y a des solutions pour envoyer les mails via un service tiers, mais il faut avoir confiance dans ce service. formspree.io a l'air d'être sympa.
Nyx-Network
Posté le
Solution intéressante, il est également possible de chiffrer le message avec javascript avant l'envoi.