Bonjour,

Voila je rencontre un petit problème avec mon code.
Je récupère en automatique des mails sur une BAL et je lance un traitement en fonction de l'objet en récupérant les pièces jointes et en les transférant par mail à une autre adresse.
Le code est fonctionnel mais je pense que je dois rater quelque chose dans la construction du mail de réponse.b
En effet, lorsque j'ouvre mon mail par outlook, tout va bien mais lorsque je l'ouvre sur iOS, j'ai la pièce jointe et le texte du mail qui sont l'un sur l'autre pourtant je pense avoir bien séparer les différents blocs.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

$eol = PHP_EOL;
$message_html = "<html>
                        <head>
                            <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
                            <title>TITRE</title>
                        </head>
                        <body>
                                <b>Bonjour</b>, <br>
                                <br>
                                blablabla<br>
                                <br>
                                Cordialement,<br>
                                <b>blabla</b><br>
                        </body>
                    </html>";
    $boundary = uniqid("_Part_".time(), true); //random unique string
    $boundary2 = uniqid("_Part2_".time(), true); //random unique string                
    //==sujet.
    $subject = " Emploi - CV demandé";
    $subject = mb_encode_mimeheader($subject,"UTF-8"); 
    //==header
    $header = "From: \"Omercity\"<no-reply@test.fr>".$eol;
    $header.= "Reply-to: \"Omercity\" <contact@test.fr>".$eol;
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"".$eol;

    //==corps
    $message = "--".$boundary.$eol;

        $message .= "Content-Type: multipart/alternative;\n";
        $message .= " boundary=\"$boundary2\"\n";
        $message .= "\n";
        $message .= "--$boundary2\n";

            //==text
            $message .= "Content-Type: text/plain; charset=utf-8\n";
            $message .= "Content-Transfer-Encoding: 7bit\n";
            $message .= "\n";
            $message .= strip_tags($message_html); //remove any HTML tags
            $message .= "\n";

            //==html
            $message .= "--$boundary2\n";
            $message .= "Content-Type: text/html; charset=utf-8\n";
            $message .= "Content-Transfer-Encoding: 7bit\n";
            $message .= "\n";
            $message .= $message_html; 
            $message .= "\n";
            $message .= "--$boundary2--\n";

        //==attachement
        $message .= "\n";
        $message .= "--$boundary\n";
        $message .= "Content-Transfer-Encoding: base64\n";
        $message .= "Content-Type: application/octet-stream; name=$filename;\n";
        $message .= "Content-Disposition: attachment; filename=$filename;\n";
        $message .= "\n";
        $message .= $content;
        $message .= "\n--$boundary";

    //==fermeture
    $message .= "--\n";

    mail($mail, $subject, $message, $header);

Un peu d'aide ne serait pas de refus.

Merci d'avance

6 réponses


Kenor
Réponse acceptée

Sans t'apporter réellement de réponses, si il y a bien une chose sur lequel je préfère utiliser une dépendance, c'est dans le domaine du mail. Comme tu as un exemple ici, le fait que ça fonctionne à un endroit ne va pas le faire fonctionner à un autre endroit. Or, je doute que tu vas tester dans les 1001 cas possibles de lecture d'email pour être sûr d'avoir trouver le graal que tu cherches.

Par conséquent, je dirai, fait confiance à la communauté de dev, et utilise une dépendance tel que PHPMailer pour envoyer ton email. Au moins, tu n'auras pas à te soucier des 150 cas particuliers qui vont faire que ça ne marche pas.

Un petit up au cas ou ^^

un dernier petit up et je sors -.-

Merci :-)
je vais regarder dans ce sens alors. (Question con c'est possible sur un ovh mutu ?)

Je n'utilise pas OVH mutu, mais il y a théoriquement aucune raison que ça ne marche pas.

Je vais mettre résolu pendant mes recherches.
Encore merci