Question

Je lutte contre les fonctions de lecture du courrier électronique de PHP depuis près de deux jours. J'écris un script pour lire les courriels d'une boîte aux lettres et sauvegarder toutes les pièces jointes sur le serveur. Si vous avez déjà fait quelque chose de similaire, vous comprendrez peut-être ma peine: PHP ne fonctionne pas bien avec la messagerie électronique!

Je me suis connecté au serveur POP3 et je peux parcourir les fichiers. Voici un aperçu du code:

if (!$mbox = imap_open ("{myserver.com:110/pop3/notls}INBOX", "u", "p"))
    die ('Cannot connect/check mail! Exiting');

if ($hdr = imap_check($mbox)) 
    $msgCount = $hdr->Nmsgs;
else 
    die ("Failed to get mail");

foreach ($overview as $message) {
    $msgStruct = imap_fetchstructure($mbox, $message->msgno);

    // if it has parts, there are attachments that need reading
    if ($msgStruct->parts) {
        foreach ($msgStruct->parts as $key => $part) {
            switch (strtoupper($part->subtype)) {
                case 'GIF': case 'JPEG':case 'PNG':

                    //do something - but what?!

                    break;
            }
        }
    }
}

J'ai marqué l'endroit où je suis coincé. Je peux utiliser imap_fetchbody ($ mbox, $ message- > msgno, $ key + 1) , mais cela me procure un tas de données comme celle-ci:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S
EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU
Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR
CAHiAi0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
...

Je suis amené à croire qu'il s'agit de données MIME. J'en ai besoin comme image! J'ai vu plusieurs classes bombarder sur Internet qui prétendent faire la magie requise. Je ne peux en obtenir aucun au travail. Je ne comprends pas pourquoi je trouve ça si difficile!

En bref , je recherche quelque chose qui puisse transformer une chaîne MIME brute en données réelles.

Était-ce utile?

La solution

J'ai trouvé un guide rapide sur la manière de traiter les e-mails avec PHP: ici .

Au bas de cette page, il y a un élément de pièce jointe echo :

if (substr($ContentType,0,4) == "text") {
echo imap_qprint($fileContent);
} else {
echo imap_base64($fileContent);
}

Je suppose que c'est ce dont vous pourriez avoir besoin ...

(edit: dans votre cas, s'il s'agit d'une image, vous pouvez toujours ignorer la partie si . Et bien sûr, enregistrez le fichier au lieu de le renvoyer:)

Autres conseils

Les données MIME sont codées en base 64, je pense donc que vous devriez pouvoir les décoder à l'aide de base64_decode

vous pouvez utiliser le imap_base64 utilisez simplement imap_savebody

Le framework Zend contient Zend_Mail, ce qui devrait faciliter la lecture des messages, et Zend_Mime, qui, je pense, peut analyser un message mime en plusieurs parties dans une structure de données sensible.

http://framework.zend.com/manual/en /zend.mail.read.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top