PHP : recevoir mails

Résolu/Fermé
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 25 mars 2020 à 17:20
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 26 mars 2020 à 20:13
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
A voir également:

4 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 mars 2020 à 17:32
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 mars 2020 à 17:40
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.
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
26 mars 2020 à 10:51
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.
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié le 26 mars 2020 à 20:17
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
0