OVH Community, votre nouvel espace communautaire.

problème fonction mail() et outlook


bibicool
04/12/2006, 16h40
Citation Envoyé par synstaff
Salut,

Moi je sais!! nananere!

Bon le truc n'est pas recent il y a un vieux post la dessus.

le responsable est le \r qui est refusé par OVH donc retire tout les \r et cela devrait marcher!

Voila bon dev!

Thierry
Haaaa tu es mon Dieu...

J'ai modifié mon script, supprimé tous les \r et ca passe nickel.. mon mail HTML arrive avec les attahcments et les images directement dans le texte..

Pour info voici un script qui fonctionne bien :

Code PHP:



//----------------------------------
// Construction de l'entête
//----------------------------------
// On choisi généralement de construire une frontière générée aleatoirement
// comme suit. (REM: je n'en connais pas la raison profonde)
$boundary "-----=".md5(uniqid(rand()));

// Ici, on construit un entête contenant les informations
// minimales requises.
// Version du format MIME utilisé
$header "MIME-Version: 1.0\n";
// Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
// Avec un frontière définie par $boundary
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$header .= "\n";

//--------------------------------------------------
// Construction du message proprement dit
//--------------------------------------------------

// Pour le cas, où le logiciel de mail du destinataire
// n'est pas capable de lire le format MIME de cette version
// Il est de bon ton de l'en informer
// REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
$msg "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\n";

//---------------------------------
// 1ère partie du message
// Le texte
//---------------------------------
// Chaque partie du message est séparé par une frontière
$msg .= "--$boundary\n";

// Et pour chaque partie on en indique le type
$msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding:8bit\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\n";
// Enfin, on peut écrire le texte de la 1ère partie
$msg .= "";
$msg .= "\n";

//---------------------------------
// 2nde partie du message
// Le fichier
//---------------------------------
// Tout d'abord lire le contenu du fichier
$file "images.gif";
$fp fopen($file"rb");   // b c'est pour les windowsiens
$attachment fread($fpfilesize($file));
fclose($fp);

// puis convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tout les 76 caractères
// pour être conforme au format RFC 2045
$attachment chunk_split(base64_encode($attachment));

// Ne pas oublier que chaque partie du message est séparé par une frontière
$msg .= "--$boundary\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: image/gif; name=\"$file\"\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: base64\n";
// Petit plus pour les fichiers joints
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
$msg .= "Content-Disposition: inline; filename=\"$file\"\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment "\n";
$msg .= "\n\n";

// voilà, on indique la fin par une nouvelle frontière
$msg .= "--$boundary--\n";

$destinataire "xxx@xxx.com";
$expediteur   "webmaster@xxx.com";
$reponse      $expediteur;
echo 
"Ce script envoie un mail avec fichier attaché à $expediteur";
mail($destinataire"test avec fichier attaché"$msg,
     
"Reply-to: $reponse\nFrom: $expediteur\n".$header);
?>


Abogil
04/12/2006, 16h24
Bonjour,
Je vais en rajouter une couche : Je termine mes lignes par \n.

Ce qui donne :
Code PHP:

         $EMAIL_ADMIN 
toto@tutu.com

         
// Format MAIL
         // -----------

         
$entete  "MIME-Version: 1.0 \n";
         
$entete .= "Content-type: text/html; charset=iso-8859-1 \n";
         
$entete .= "From: $EMAIL_ADMIN  \n";
         
$entete .= "Disposition-Notification-To: $EMAIL_ADMIN  \n";

         
// Message de Priorité haute
         // -------------------------
         
$entete .= "X-Priority: 1  \n";
         
$entete .= "X-MSMail-Priority: High \n"

choupette
04/12/2006, 15h48
Bonjour,

Merci tout le monde pour vos réponses !

Je n'ai pas très bien compris celle de bbq... mais bon, c'est un peu technique pour moi !

J'essaie de tester la solution de bibicool, mais OVH met très longtemps à renvoyer le mail... ça peut mette de 2 secondes à 6 heures!!! ça m'est déjà arrivé mais ce n'est pas très facile pour tester !!!

Je n'ai pas trouvé le post dont parle synthaff, ce n'est pas faute d'avoir recherché !!! Merci , je vais essayer cette solution dès qu'ovh me le permettra.

à +

synstaff
04/12/2006, 15h14
Salut,

Moi je sais!! nananere!

Bon le truc n'est pas recent il y a un vieux post la dessus.

le responsable est le \r qui est refusé par OVH donc retire tout les \r et cela devrait marcher!

Voila bon dev!

Thierry

bibicool
03/12/2006, 12h37
Salut,

Bon je sais pas trop d'où vient ton problème... je cherche également depuis ce matin pour envoyer des emails avec attachements..

Bon pour t'aider j'avais ce code qui fonctionnait bien où l'html s'affichait sous outlook,

Seb

Code PHP:
// liste des destinataires du message
$adresse="xxx@xx.com";

// titre du message : zone sujet
$sujet="Envoi d'un message avec la fonction Mail()";

// contenu du message
$corps="
Corps du message
 si vous recevez ce message ... c'est que tout fonctionne bien"
;

// Création de l'entête du message
// cette entete contient l'email de l'expéditeur ainsi que l'email pour la réponse.
$entete="Content-type:text/html\nFrom:webmaster@xx.com\r\nReply-To:
webmaster@xx.com"
;

// envoi du mail
mail ($adresse,$sujet,$corps,$entete);
?>
Perso ca fonctionne

bbq
01/12/2006, 20h17
Il y a confusion entre un compte POP (yahoo) et le webmail (de yahoo) et outlook qui est un client POP...
Et le formulaire ça en rajoute dans la confusion

choupette
01/12/2006, 16h54
Bonsoir,

Je suis bien embêtée car je m'arrache les cheveux sur un code qui me permet de récupérer les données d'un formulaire (de devis) et de me les envoyer par mail. Cela fonctionne très bien sur une boite mail comme Yahoo, malheureusement sur Outlook, les données sont bien récupérées mais le code html est inscrit sur le message et n'est pas interprété. Je répète, sur Yahoo c'est parfait. D'où peut venir mon problème ?
Code:
\r\n";
$from.="Reply-To: $prenom $nom <$email>\n";
$from.="X-priority:3\n";
$codehtml=
"nom : $nom 
". "prenom : $prenom
" . "adresse : $adressephy
" . "code postal : $codepostal
". "ville : $ville
". "tel fixe : $telfixe
". "telport : $telport
" . "email : $email

". "complement : $texte

". ''; $from.="MIME-Version: 1.0\r\n"; $from.="Content-Type: text/html"; if (mail($adresse,"demande de devis",$codehtml,$from)) echo("



Formulaire envoyé ! Nous vous répondrons rapidement. Merci!


Cliquez ici pour revenir à l'accueil
"); else echo("



Problème à l'envoi du mail...désolé nous ne pouvons actuellement traiter votre demande


Contactez nous plus classiquement"); ?>
Merci !