php - por - function form_mail($ spara $sasunto $stexto $sde
¿Cómo puedo guardar los archivos adjuntos de correo electrónico en el servidor en PHP? (4)
Encontré una guía rápida sobre cómo tratar los correos electrónicos con PHP: aquí .
En la parte inferior de la página hay un echo
cuerpo 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 ...
(editar: en su caso, si se trata de una imagen, siempre se puede omitir la parte if
. Y, por supuesto, guardar el archivo en lugar de repetirlo :)
He estado luchando contra las funciones de lectura de correo electrónico de PHP durante la mayor parte de dos días. Estoy escribiendo un script para leer correos electrónicos de un buzón y guardar los archivos adjuntos en el servidor. Si alguna vez has hecho algo similar, puedes comprender 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 bosquejo 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;
}
}
}
}
Marqué donde estoy atascado. Puedo usar imap_fetchbody($mbox, $message->msgno, $key+1)
pero eso me da 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 hacen creer que esto es información MIME. Lo necesito como una imagen! He visto varias clases bombardeando Internet que dicen hacer la magia necesaria. No puedo hacer que ninguno de ellos trabaje. ¡No entiendo por qué estoy encontrando esto tan difícil!
En resumen , estoy buscando algo que pueda convertir una cadena MIME en bruto en datos reales.
Los datos MIME están codificados en base 64, así que creo que deberías poder decodificarlos usando base64_decode
Zend framework contiene Zend_Mail, que debería facilitar 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 sensata.
puede usar la función imap_base64
y simplemente imap_base64
a un archivo, o usar imap_savebody