¿Cómo puedo guardar archivos adjuntos de correo electrónico en el servidor en PHP?

StackOverflow https://stackoverflow.com/questions/162576

  •  03-07-2019
  •  | 
  •  

Pregunta

He estado luchando contra las funciones de lectura de correo electrónico de PHP durante casi dos días. Estoy escribiendo un script para leer los correos electrónicos de un buzón y guardar los archivos adjuntos en el servidor. Si alguna vez has hecho algo similar, es posible que entiendas mi dolor: ¡PHP no funciona bien con el correo electrónico!

Me he conectado al servidor POP3 y puedo iterar los archivos. Aquí hay un resumen del código:

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;
            }
        }
    }
}

He marcado donde estoy atascado. Puedo usar imap_fetchbody ($ mbox, $ message- > msgno, $ key + 1) pero eso me permite obtener un montón de datos como este:

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

Me llevan a creer que estos son datos MIME. ¡Lo necesito como imagen! He visto varias clases de bombardeos en Internet que dicen hacer la magia necesaria. No puedo conseguir que ninguno de ellos funcione. ¡No entiendo por qué estoy encontrando esto tan difícil!

En resumen , estoy buscando algo que pueda convertir una cadena MIME sin formato en datos reales.

¿Fue útil?

Solución

Encontré una guía rápida sobre cómo tratar los correos electrónicos con PHP: aquí .

En la parte inferior de esa página hay un echo del cuerpo del archivo adjunto:

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

Supongo que esto es lo que podrías necesitar ...

(edite: en su caso, si es una imagen, siempre puede omitir la parte si . Y, por supuesto, guardar el archivo en lugar de repetirlo :)

Otros consejos

Los datos MIME están codificados en base-64, por lo que creo que deberías poder decodificarlos usando base64_decode

puede usar imap_base64 función y simplemente enviarlo a un archivo, o usar imap_savebody

El marco de trabajo de Zend contiene Zend_Mail, que debería facilitar mucho la lectura de los mensajes de correo, y Zend_Mime, que creo que puede analizar un mensaje mime de varias partes en una estructura de datos sensible.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top