Afficher sur un site une image récupérée via le pop3 d'un mail

Fermé
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017 - Modifié le 1 mai 2017 à 17:55
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017 - 25 sept. 2017 à 15:35
Bonjour je ZIGZAG , je déambule perdu ...
Je cherche à trouvez le système pour afficher une image récupérée via le POP3 d'un mail en PHP sur mon site.

Pour le moment je n'est qu'un seul email dans la boite référante. Pour la suite je souhaite pouvoir changer l'image en envoyant un autre mail.

Je me connecte au POP3 et récupère le jpg en base64, je n'arrive pas à décoder le jpg en base64 ... puis à l'afficher ...

Je ne trouve pas le code pour lire uniquement le dernier mail ...

Je vous donne le code que j'ai réussi a faire jusque là ...

Un grand merci pour votre aide !!

<?php

// Configuration
$serverimap = '{pop.online.net:110/pop3}INBOX';
$login = 'LOGIN';
$password = 'PASSWORD';


//Connexion au serveur email
$mbox = imap_open ("$serverimap", "$login", "$password");



$bodyText = imap_fetchbody($mbox,1,1.1);
if(!strlen($bodyText)>0){
$bodyText = imap_fetchbody($mbox,1,1);
}
$bodyText = trim(substr(quoted_printable_decode($bodyText), 0,500000));
echo $bodyText;

//comment faire un lien dans XXXXXXX de $bodyText ??????????

$imgstr = 'image/jpg;base64,XXXXXXXXXX';
$new_data=explode(";",$imgstr);
$type=$new_data[0];
$data=explode(",",$new_data[1]);
header("Content-type:".$type);
echo base64_decode($data[1]);


?>
A voir également:

3 réponses

Utilisateur anonyme
1 mai 2017 à 21:21
Pour récupéré le dernier mails tu peux ajouter ceci juste après avoir ouvert la boite mail (imap_open).

$last_email = end(imap_search($inbox,'ALL'));


Et du coup pour récupéré le body il suffit de faire:

$bodyText = imap_fetchbody($mbox, $last_email, 1.1);


Mais après comment sont construit tes emails? Car avec le fetchbody, tu recherches soit 1.1 ou 1, donc soit du text/plain donc un mail qui contient que du texte, ou multipart/alternative, donc un mail qui contient du texte et/ou de l'html.
Où se trouve l'image, enfin comment tu l'ajoutes à l'email? Car si c'est en fichier attaché, normalement c'est impossible de la trouver comme ça.
Enfin donnes un exemple de mail pour comprendre comment tu fais.

Ensuite pourquoi tu utilises cette image? Est ce obligatoire de passer par une boite mail, car si c'est pour changer un fond ou autre, il y a sans doute bien plus simple.
0
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017
2 mai 2017 à 08:31
Bonjour ZeNairof, merci pour cette réponse super rapide !!

L'objectif est de pouvoir faire une page avec "la photo du jour" facile et rapide à actualiser.

Je ne suis pas sure à 100% de la méthode d'envoie de la photo dans l'email pour le moment, mais je suppose fortement que se sera en pièce jointe.

Pour effectuer les testes, j'ai envoyé dans la boite mail 3 email avec des photo en piece jointe.

Je te donne les code de la boite mail :



$serverimap = '{pop.online.net:110/pop3}INBOX';
$login = 'photo@matthieu-durand.com';
$password = 'Hydrospee';



Encore merci pour ton aide !!
0
Utilisateur anonyme
2 mai 2017 à 10:33
Voilà je viens de tester le code, je peux te dire que la dernière image est une vague, que tu as envoyé ce matin à 08:02:59.

/* Identifiants */
$hostname = '{pop.online.net:110/pop3}INBOX';
$username = 'user';
$password = 'pass';

/* Connexion à la boîte email */
$inbox = imap_open($hostname,$username,$password, null, 1);

/* Récupération de la liste d'email */
$emails = imap_search($inbox,'ALL');

/* Si il y a des emails... */
if($emails) {

	/* Récupération de l'id du dernier email */
	$email = end($emails);

	/* Récupération de la structure de l'email */
	$structures = imap_fetchstructure($inbox, $email)->parts;

	$img = null;

	/* Boucle sur les différente partie de l'email */
	foreach ($structures as $key => $structure) {

		/* On vérifie que c'est bien une image (type = 5) et que c'est un fichier attaché (disposition = attachment) */
		if ($structure->type === 5 && $structure->disposition === 'ATTACHMENT') {

			/* On récupère le contenu de l'image et on le décode (base64_decode) ainsi que son type (jpg, png, gif ...) */
			$body = imap_fetchbody($inbox, $email, $key+1);
			$img = array(
				'type' => 'image/'.strtolower($structure->subtype),
				'body' => base64_decode($body)
			);			
		}
	}

	/* Si on a bien récupéré une image, alors on l'affiche */
	if (!empty($img)) {
		header('Content-type: '.$img['type']);
		print $img['body'];
	}

}

/* On ferme la connexion */
imap_close($inbox);


Après je trouve que c'est limite chercher compliqué quand on peut faire simple, car si tu dois écrire un email à chaque fois en attachant une image, autant faire un formulaire sécuriser pour uploder l'image directement sur le serveur, voir directement en FTP. Après il est simple en PHP de récupéré la dernière image dans un dossier.

Surtout que là je conseil de faire un système de cache, car si il faut à chaque fois aller sur la boîte email pour avoir l'image, les ressources PHP ainsi que le temps de chargement sera énorme juste pour une image.

Et un conseil retire les identifiants du dernier message par mesure de sécurité.
0
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017
2 mai 2017 à 13:16
C 'est juste ENORME !!
Tout marche , ToP.

Je te tien au courant pour la mise en place de l'application sur le terrain.

Si éventuellement la méthode d'envoie de la photo dans l'email n'était pas en piece jointe quelle serai la solution ?

Encore un grand merci.

( J'ai bien changé les codes de la boite mail .. )
0
Utilisateur anonyme
2 mai 2017 à 16:04
Si l'image est dans le corps du message, il faudra changer la vérification, ou on cherche le type et la disposition.
Car là ça ne fonctionne que si c'est en attachement. Mais ça sera juste cette condition à changer le reste, et sans doute qu'il faudra parser le contenu du message, mais normalement quand on lie une image, c'est en fichier attaché.
0
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017 > Utilisateur anonyme
2 mai 2017 à 17:47
Ok, bon, en tout cas encore merci et je te recontact dans quelques jours pour te dire si ça fonctionne bien sur le terrain.
0
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017 > Utilisateur anonyme
21 sept. 2017 à 17:32
Bonjour ZeNairof,
De retour sur mon projet, après la saison ...
Est il possible que tu regarde pour adapter le code PHP avec le mail qui vient depuis la cam directement.
Dans la boite mail , j ai fais envoyer par la cam une photo, le mail est apparemment construit différemment.

J'ai remis pour que tu puisse tester les memes codes pour la boite mail.

$serverimap = '{pop.online.net:110/pop3}INBOX';
$login = 'photo@matthieu-durand.com';
$password = 'Hydrospee';

Un grand merci !!
0
matthieudurand Messages postés 6 Date d'inscription lundi 1 mai 2017 Statut Membre Dernière intervention 25 septembre 2017 > Utilisateur anonyme
25 sept. 2017 à 15:35
le fichier jpg à afficher serait dans un email de ce format ...


Return-Path: <blabla@blabla.com>
Delivered-To: <blabla@blabla.com>
Received: from exim-proxy-dc2-2.online.net ([10.41.2.92])
by exim-backend-21.online.net (Dovecot) with LMTP id IkQLLJQyxVnUIAAAge5GdQ
for <blabla@blabla.com>; Fri, 22 Sep 2017 17:58:29 +0200
Received: from [10.41.2.137] (helo=smtp.smtpout.orange.fr)
by exim-proxy-dc2-2.online.net with esmtp (Exim 4.86_2)
(envelope-from <blabla@blabla.com>)
id 1dvQLV-0004B5-C7
for blabla@blabla.com; Fri, 22 Sep 2017 17:58:29 +0200
Received: from smtp.smtpout.orange.fr ([80.12.242.126])
by mx-vit.online.net (MXproxy) for blabla@blabla.com ;
Fri, 22 Sep 2017 17:58:29 +0200 (CEST)
X-ProXaD-SC: state=HAM score=49
Received: from CAM000 ([10.162.66.33])
by mwinf5d07 with ME
id CfxU1w00c0j3Q9m03fxXkk; Fri, 22 Sep 2017 17:58:29 +0200
X-ME-Helo: CAM000
X-ME-Auth: c2VycmUtY2hlLWVhdXgtdml2ZXMxQG9yYW5nZS5mcg==
X-ME-Date: Fri, 22 Sep 2017 17:58:29 +0200
X-ME-IP: 10.162.66.33
Message-ID: <3ceabe91ed915f2ae68eaacdf0f42195@mwinf5d07.me-wanadoo.net>
From: "CAM000" <blabla@blabla.com>
To: <blabla@blabla.com>
Subject: 22/09/2017 17:53:56
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="===Quectel_000_0013_01CA1D99.17A48460==="
X-online-proxy-in: FLEX_R0FVczRHR0k4a3k2czRFMA==cPvuIpiJsq/n9XKVtRtD52JfLjl1ZfZBr3q2TWKJ
X-online-to: blabla@blabla.com
X-original-for: blabla@blabla.com

This is a multi-part message in MIME format.

--===Quectel_000_0013_01CA1D99.17A48460===
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: 7bit

22/09/2017 17:53:57
--===Quectel_000_0013_01CA1D99.17A48460===
Content-Type: application/octet-stream;
name="0017.JPG"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="0017.JPG"

/9j/2wCEAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIx


........




--===Quectel_000_0013_01CA1D99.17A48460===--
0