PHP : recevoir mails [Résolu]

Signaler
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
-
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
-
Bonjour,

Je voudrais savoir s'il est possible de "recevoir" des mails grâce à une page PHP. Je m'explique :
j'ai une page
mail.php
(par exemple), à l'adresse
http://monsite.fr/mail.php


Je voudrais envoyer un mail (depuis mon adresse personnelle) à l'adresse
mailto:mail@monsite.fr
. Le script mail.php devrait alors être exécuté, détecter le protocole mailto, et récupérer le contenu du mail (avec les en-têtes de préférence). Le script pourrait alors traiter le mail selon les besoins (le stocker dans une base de données, le transmettre avec la fonction mail(), ...)

Je ne peux pas installer d'extensions PHP, ni de serveur mail (j'utilise un hébergeur gratuit), donc il faudrait que tout soit fait en PHP standard (+ éventuellement avec un fichier .htaccess)

Mes recherches n'ont rien donné donc je me doute que cela ne doit pas être possible, ou du moins pas de la manière que je demande, mais j'espère que vous pourrez m'éclairer et m'aiguiller vers la solution la plus proche possible de mes besoins.

Dans le cas où cela ne pourrait pas être mis en place, est-il possible, à partir d'un script Sieve, d'appeler un script PHP ?

Configuration: Windows / Firefox 74.0

4 réponses

Messages postés
29801
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 octobre 2020
2 864
Bonjour,

Pour recevoir le mail... il faut qu'il soit envoyé à une adresse mail valide (donc dans un serveur de mail).
En php, tu peux accéder au contenu des boites mails via les protocols imap ou smtp
https://www.php.net/manual/fr/function.imap-open.php

Par contre, la detection ne sera pas "automatique".
Il faut que tu créés un script et que tu l'exécutes à intervalle régulier via une tâches planifiée ( CRON ) ... enfin... si ton hébergement gratuit te le permet.
Messages postés
12712
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 octobre 2020
706
bonjour, je ne vois pas trop comment tu pourrais réaliser ce que tu décris.
tu ne décris pas ce que tu veux réaliser fonctionnellement, tu décris une solution que tu as imaginée.

si tu veux absolument travailler par email, il est sans doute possible de faire ainsi:
- le mail est envoyé à une boite aux lettres accessible via le protocole imap
- le script PHP est exécuté régulièrement automatiquement
- le script PHP va se connecter et examiner le contenu de la boite aux lettres, et agir en conséquence. il peut même peut-être supprimer des messages

si cela t'intéresse, renseigne toi sur IMAP en PHP.
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
14
Bonjour,

Merci pour vos réponses.
Je vais me renseigner pour le protocole IMAP. Cela m'oblige à disposer d'une adresse mail externe au site web, mais je devrais pouvoir me débrouiller.

Mon hébergeur m'autorise les tâches CRON (dans une certaine mesure, qui me sera sûrement suffisante pour ce que je veux faire). Au pire, la boîte mail sera interrogée lorsque l'utilisateur exécutera manuellement le script PHP.
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
14
Je confirme que j'ai réussi à mettre en place le système que vous m'avez décrit (après avoir réussi à trouver un hébergeur gratuit sur lequel je pouvais activer imap).

Je vais mettre le sujet en résolu.

Voici une partie de mon code, si ça peut aider des personnes qui voudraient mettre en place le même système. Ce n'est pas un code prêt à être copié collé, mais ça peut accélérer/aiguiller les recherches :

$imap =  imap_open("hôte:993/imap/ssl}", "adresse@domaine", "motdepasse");

$emails = imap_search($imap, 'UNDELETED'); // UNSEEN  pour les messages non lus
if($emails){
   rsort($emails);
   foreach($emails as $numero) {
         $overview = imap_fetch_overview($imap,$numero,0);
         //récupérer $overview[0]->subject,  $overview[0]->from , $overview[0]->udate), ...

        $structure = imap_fetchstructure($imap, $numero);
        // déterminer la section contenant le corps du message en itérant dans $structure ->parts (rechercher $part->subtype == "HTML" ou $part->subtype == "PLAIN" selon les besoins)
       //déterminer aussi l'encodage du message avec $part->encoding
        $body = imap_fetchbody($imap,$numero,$section); //généralement, $section = "1.1" "1.2" ou "2" selon les messages
        //utiliser la méthode de décodage appropriée en fonction de l'encodage déterminé (imap_utf7_decode, quoted_printable_decode, ...)

         //on pourra également chercher les pièces jointes (repérables avec $part->disposition = "attachment" (la casse peut varier)).
//penser de même à déterminer l'encodage et à décoder les pièces jointes (les méthodes sont un peu différentes : imap_8bit, imap_binary, imap_qprint, imap_base64, ...)

   }
}

imap_close($imap);



Je n'ai pas noté tous les sites que j'ai visités, mais je peux vous en donner quelques un qui m'ont été très utiles, en plus de la documentation PHP que vous m'avez envoyée.

https://electrictoolbox.com/php-imap-message-parts/
https://electrictoolbox.com/extract-attachments-email-php-imap/
http://www.levijackson.net/parsing-an-email-message-with-phps-imap-functions/
https://stackoverflow.com/questions/8036968/fetch-attactments-imap-fetchbody