Envoie d'image par e-mail

Eléphant du PHP | 168 Messages

16 janv. 2010, 16:59

Bonjour à tous,
voilà j'ai encore un problème avec mes mails. L'envoie fonctionne mais j'y ajoute une image (les permissions sont réglées et tout) mais quand j'ouvre le mail avec IE j'ai une une croix rouge à la place de l'image et avec FF j'ai une l'icone de problême de comptabilité(qui revient à la même chose que la croix rouge).
$texte = "<html><body>Voici des annonces en rapport avec votre recherche. ".$nombre." annonce(s) à voir : ";
$texte .= "<br><a href='$lien'><span style='background-color:yellow;'>Un bien correspond à votre recherche : $res->BIEN_TITRE &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp $type &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp $prix
			&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp </span></a><img src=$annonceImage/>";
$reponse=$expediteur;
	if(mail($entry->MAIL,'Alerte annonces immobilieretcredit.com',$texte.'</body></html>',
        "Reply-To: $reponse\r\n".
        "Content-Type: text/html; charset=\"iso-8859-1\"\r\n")) echo 'mail envoyé'; else echo 'pas envoyé';
	}
$annonceImage contient bien le bon chemin et je répète que les permissions sont okay.
Est-ce que quelqu'un a une idée d'où peut venir le problème?
D'avance merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2010, 17:29

Quand tu dis que ta variable $annonceImage contient le bon chemin, elle contient le bon chemin par rapport à quoi ?

C'est un chemin relatif par rapport à ton site ? (chose que le client de messagerie ne peut donc pas trouver)
C'est un chemin relatif par rapport au contenu du mail ? (auquel cas il te faut envoyer l'image avec le mail)
C'est un chemin absolu vers ton site ? (avec le http://tondomaine.com auquel cas, il faut être connecter à internet pour la voir)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 168 Messages

16 janv. 2010, 17:32

C'est un chemin de mon ftp, il faut donc j'envoie l'image en pièce jointe?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 janv. 2010, 17:52

Tu as deux solutions en fait... il faut soit :
- que ton image soit accessible sur internet, auquel cas tu peux mettre son url complète (avec le chemin http), et le client de messagerie affichera l'image (s'il a accès à internet)
- que ton image soit rattachée au message qui est envoyé pour pouvoir être affichée directement

Le premier est le plus simple à réaliser, le second est plus complexe , mais ne nécessite pas que la connexion internet soit active pour être consultée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 168 Messages

16 janv. 2010, 18:17

Perso je préfère la deuxième solution.
Mais alors je vais devoir utiliser la classe Mail de PHP5 non? ce n'est pas possible avec la simple fonction mail(), si?

Eléphant du PHP | 250 Messages

16 janv. 2010, 21:57

Tient si ça peut t'aider :wink: :
<?php
  // on génère une frontière
  $boundary = '-----=' . md5( uniqid ( rand() ) );
  // on génère un identifiant aléatoire pour le fichier
  $file_id  = md5( uniqid ( rand() ) ) . $_SERVER['SERVER_NAME'];

  // on va maintenant lire le fichier et l'encoder
  $path = 'moi.jpg'; // chemin vers le fichier
  $fp = fopen($path, 'rb');
  $content = fread($fp, filesize($path));
  fclose($fp);
  $content_encode = chunk_split(base64_encode($content));

 
  $headers = "MIME-Version: 1.0\n";
  $headers .= "Content-Type: multipart/related; boundary=\"$boundary\"";

  $message  = "Ceci est un message au format MIME 1.0 multipart/mixed.\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: text/html; charset=\"iso-8859-2\"\n";
  $message .= "Content-Transfer-Encoding: 8bit\n\n";
  $message .= "<html><body>coucou !, <br><br>";
  $message .= "Voila une tof sexy de moi :<br>";
  $message .= "<img src=\"cid:$file_id\" alt=\"ma tof!!!\"><br>";
  $message .= "<br>bises @+";
  $message .= "\n\n";
  $message .= "--" . $boundary . "\n";
  $message .= "Content-Type: image/jpg; name=\"$path\"\n";
  $message .= "Content-Transfer-Encoding: base64\n";
  $message .= "Content-ID: <$file_id>\n\n";
  $message .= $content_encode . "\n";
  $message .= "\n\n";
  $message .= "--" . $boundary . "--\n";

  mail('[email protected]', 'une photo de moi...:p', $message, $headers);
?>

J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 168 Messages

17 janv. 2010, 01:10

  $message .= "<img src=\"cid:$file_id\" alt=\"ma tof!!!\"><br>";
  
C'est quoi le cid ici ?
$content_encode = chunk_split(base64_encode($content));

Et ça c'est obligatoire?

Eléphant du PHP | 250 Messages

17 janv. 2010, 01:44

Chaque pièce jointe qui est référencé dans le corps du message (par exemple une image dans le corps HTML) a généralement un entête Content-ID qui est utilisé pour faire référence à cet attachement du corps du message.

Par exemple, si le corps HTML contient <IMG SRC="cid:picture1">, il ya une image en pièce jointe avec Content-ID picture1. Cette image doit être affichée à la place du tag <IMG SRC="cid:picture1"> lorsque le corps est rendu HTML.

Il faut encoder un image pour pouvoir l'envoyer par mail:

http://www.commentcamarche.net/content ... mime.php3
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 168 Messages

18 janv. 2010, 11:08

D'accord merci diabless, mais si je veux joindre plusieurs images

  $message .= "Content-Transfer-Encoding: base64\n";
  $message .= "Content-ID: <$file_id>\n\n";
  $message .= $content_encode . "\n";
  
?>

comment je fais, ça se passe ici non?

Eléphant du PHP | 250 Messages

18 janv. 2010, 14:56

Ben j'avoue, que je me suis pas posée la question.
Je pense que déjà, faut passer par fopen:
$path[1] = 'moi.jpg'; // chemin vers le fichier
$path[2] ='bt.jpg';
$ac=implode(",",$path);
for($x=1;$x<=sizeof($path);$x++){
$fp = fopen($ac, 'rb');}
$content = fread($fp, filesize($path));
fclose($fp);
Le problème c'est que fopen ouvre seulement un fichier ! J'ai réussie à m'envoyer un array en pièce jointe :mrgreen:
Franchement je vois pas là :roll:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 168 Messages

18 janv. 2010, 15:08

bon en tout cas merci pour ton aide, je vais voir ça.

Eléphant du PHP | 250 Messages

18 janv. 2010, 15:24

bon en tout cas merci pour ton aide, je vais voir ça.
Tient moi au courant si tu trouves ça m'intéresse :wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 168 Messages

18 janv. 2010, 15:37

C'est expliqué sur phpfacile:
http://www.phpfacile.com/creer_un_site_web_en_php/envoyer_un_mail_en_php_2.php5

Eléphant du PHP | 250 Messages

18 janv. 2010, 15:46

http://www.emanueleferonato.com/2008/07 ... -with-php/
Intéressant, mais moi je pensais plutôt à ça.
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.

Eléphant du PHP | 250 Messages

18 janv. 2010, 16:44

Je viens de tester le script du lien que je t'ai envoyé ! Il fonctionne super bien :wink:
J'ai un petit éléphant rose chez moi avec dessus PHP woman :p
Pour une Europe sans hypocrisie, n'y barratins.
L'euro caca j'en veux plus. Les conneries c'est fini.