Envoi de mails depuis un formulaire php / apache

Bonjour la communauté,

J’héberge un site web sur mon Rasp.
J’ai créé une page de contact permettant au visiteur d’envoyer son nom, son adresse mail et un message par mail via un formulaire.
Lorsque j’héberge mon site sur OVH le formulaire fonctionne.
Sur le Rasp non…

Ai-je besoin d’un serveur mail sur le Rasp pour y parvenir ?

Merci à vous !

Bonjour,

Vous devez installer un serveur web sur votre Raspberry.
Apache est une solution open source, très utilisée par l’ ensemble de la communauté Linux.

@++

1 « J'aime »

Bonjour Stef-k,

Merci pour votre réponse, mais je pense qu’elle n’est pas adaptée…
J’utilise déjà Apache pour héberger des sites.
En l’occurence je désire que, via un de ces sites le visiteur puisse compléter un formulaire (ce qui est fait et fonctionnel) et l’envoyer par mail en cliquant sur « submit »…

Je pense qu’il faut un serveur mail plutôt, mais je voudrais confirmation…

L’envoi de mail automatique est un sujet passionnant quoique parfois très subtil.
Pour bien comprendre, il faut savoir que le protocole d’envoi de mail est smtp, et que smtp utilise lui-même le protocole telnet, qui est simplement un protocole d’échange de messages.
Pour envoyer un mail, on se connecte forcément sur un serveur smtp. « On », c’est vous, ou c’est votre serveur de mail, qui va lui-même se connecter (en smtp) sur le serveur de mail du destinataire, ou sur un serveur relais (on dirait que ceci ne se fait plus trop). Vous pouvez aussi utiliser un autre protocole pratiqué par votre serveur de mail, comme par exemple imap, mais in fine, c’est bien smtp qui va être utilisé.
Pour que ça marche, il faut que le ou les serveurs smtp acceptent que vous vous connectiez, et que vous envoyiez un message. Si le serveur est votre serveur linux, et que ce serveur fait partie d’un domaine officiel (ceci est fondamental) et que le dns de ce domaine mentionne ce serveur comme serveur smtp (ceci est fondamental), et que le serveur smtp est correctement configuré (ceci est fondamental), alors tout va bien, vous pouvez très facilement envoyer un mail.
Par exemple, en tapant les commandes une à une (pratique pour tester) :

La commande pour démarrer telnet :
telnet localhost 25

Le serveur répond :
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‹ ^] ›.
220 vpsxxxxxx.ovh.net ESMTP Postfix (Ubuntu)

La commande smtp HELO :
HELO mondomaine.fr

Le serveur répond :
250 vpsxxxxxx.ovh.net

La commande pour indiquer l’expéditeur :
MAIL FROM: jmbc@mondomaine.fr

Le serveur répond :
250 2.1.0 Ok

La commande pour indiquer le destinataire :
RCPT TO: jmbc@gmail.com

Le serveur répond :
250 2.1.5 Ok

La commande pour le corps du message :
DATA

Le serveur répond :
354 End data with CRLF.CRLF

Le corps du message :
Subject: test de message telnet
blabla
.

Le serveur répond :
250 2.0.0 Ok: queued as 559503E905

Et enfin, la commande QUIT :
Le serveur répond :
221 2.0.0 Bye
Connection closed by foreign host.

Et à la fin du fichier /var/log/mail.log, vous avez un truc du style :
Apr 20 10:07:20 vpsxxxxxx postfix/smtp[14846]: 35C3C3E905: to=jmbc@gmail.com, relay=gmail-smtp-in.l.google.com[66.102.1.27]:25, delay=38, delays=37/0.01/0.49/0.12, dsn=2.0.0, status=sent (250 2.0.0 OK 1555747640 n16si5169713wmh.3 - gsmtp)

Notez la mention « status=sent » qui indique que votre serveur de mail (en l’occurrence postfix) a bien fait son boulot.
Le mail va-t-il être reçu ? C’est au bon vouloir du serveur du destinataire. Ici, gmail m’a collé le message dans les spam ; mais ça marche.

En python, c’est plus facile :

import smtplib,datetime,sys
import email,email.parser
from email.header import Header
from email.mime.text import MIMEText
msg = MIMEText(‹ Bla bla ›,‹ html ›,‹ utf8 ›)
msg[‹ Subject ›] = Header(‹ Test envoi mail ›,‹ utf8 ›)
msg[‹ From ›] = ‹ jmbc@mondomaine.fr ›
dest = ‹ jmbc@gmail.com ›
msg[‹ To ›] = dest
msg[‹ Date ›] = datetime.datetime.now().strftime(‹ %c ›)
server= smtplib.SMTP(‹ localhost ›,‹ 25 ›)
msgtxt= msg.as_string()
server.sendmail(dest,[dest],msgtxt)
server.quit()

Et hop !
En php ? J’en sais rien ma foi… mais c’est bien possible que ce soit encore plus simple.

Maintenant, pourquoi ça marche chez OVH, et pas sur le RPI ?
Sûrement parce que le serveur OVH dispose d’un serveur smtp bien configuré, et qui accepte la connexion des utilisateurs locaux sans authentification.
Sur le RPI, soit vous vous connectez directement sur le serveur du destinataire (mais il faut que celui-ci accepte les connexions de la part d’une machine non référencée sur un dns, et c’est de plus en plus rare), soit vous installez et configurez un serveur smtp (attention, prévoir de l’huile de coude), mais il faudra que celui-ci soit référencé dans un dns.

Conclusion de tout ça, si vous êtes chez vous, en dehors d’un domaine, guère possible de faire du smtp. Il faut alors passer par un serveur de mail sur lequel vous avez un compte, et qui acceptera les connexions depuis chez vous, authentifiées. Et là, c’est plutôt compliqué de faire une réponse générale, car il y a plein de cas de figure. Par exemple, il faudra utiliser ce que l’on appelle les TLS, et là, je ne me lancerais pas dans une explication… Le serveur gmail sait faire, mais il faut fouiner dans les paramètres de sécurité. Le serveur de la poste sait faire aussi, il faut trouver la bonne recette sur le web.

Enfin, sauf erreur de ma part, apache ne sait pas envoyer de mail.

Bon courage, et bon amusement…

1 « J'aime »

Bonsoir,

Vous pouvez utiliser Apache et PHP avec la fonction « mail() ». Ca marche très bien :grinning:

1 « J'aime »

C’est php qui gère le message, comme le fait python. Apache n’est concerné que pour lancer php.
Peu importe d’ailleurs, tout ceci fonctionne également très bien, aux conditions qui sont explicitées dans mon message précédent

1 « J'aime »

Merci beaucoup pour vos réponses !
Je vais tester ça dès que le temps me le permettra :blush:
Excellente journée à vous,

Salut au cas où tu voudrais utiliser une page php je peux regarder les codes.
J’utilisais ces actions sur des sites web, envoi d’un mail lors de l’inscription, notifications…

J’utilisais aussi un script ajax /php qui envoi un mail par seconde.

Bonjour,
pour pouvoir envoyer des mails avec la fonction mail de php, il faut :
1°) installer un outil d’envoi de mail, pas installé par défaut, comme postfix ou ssmtp.
2°) configurer postfix ou ssmtp.
3°) configurer php pour qu’il sache comment envoyer les mails (au minimum ligne «sendmail_path» de php.ini)

1 « J'aime »

Merci pour ta réponse ! J’ai le formulaire qui fonctionne et je n’ai pas l’intention d’envoyer des mails à la chaine :slight_smile:

Super, c’est exactement ce que je souhaitais entendre !
Reste plus « qu’à » !
Merci !