X-Git-Url: https://git.llucax.com/software/sercom-old.git/blobdiff_plain/45bc957ce2739336223af92270b77ab8375d17c2..8ae0a652137dc133865fb1e2839aa41d1ee0fb88:/src/sc_fetch diff --git a/src/sc_fetch b/src/sc_fetch index 528b1db..7b82bf9 100755 --- a/src/sc_fetch +++ b/src/sc_fetch @@ -1,6 +1,9 @@ #!/usr/bin/php4 120) { // 2 horas sin poder conectarse logs('Hace 2 horas que no se puede conectar al servidor ('.imap_last_error().')', ERROR); $mbox_errcount = 0; @@ -87,7 +90,7 @@ while (1) { $mbox_errcount = 0; logs('Conectado como '.@$mconf['user']." a $mailbox", DEBUG); if (imap_num_msg($mbox) and $hdr = imap_headerinfo($mbox, 1)) { - logs("Nuevo mail '{$hdr->subject}' de {$hdr->fromaddress}"); + logs(sprintf("Nuevo mail '%s' de %s", decode_header($hdr->subject), decode_header($hdr->from))); @list($padron, $ej, $ent, $codigo) = validar_cabecera($hdr); if ($padron) { logs('Cabecera válida', DEBUG); @@ -121,8 +124,8 @@ while (1) { . "Recuerde que el formato del asunto es estricto:\n" . "[padrón] [ejercicio].[entrega] [código]\n\n" . "Donde [padrón] es su número de padrón, [ejercicio] es el número de\n" - . "ejercicio (1 a 4), [entrega] el número de entrega (1 o 2) y [código]\n" - . "es el código verificador que le fue asignado por la cátedra.\n" + . "ejercicio (1 a 4), [entrega] el número de entrega (1 entrega, 2 reentrega)\n" + . "y [código] es el código verificador que le fue asignado por la cátedra.\n" ); } imap_delete($mbox, 1); @@ -158,7 +161,7 @@ imap_close($mbox); function enviar_respuesta($tipo, $to, $mensaje = '', $intento = null) { global $mconf; - $subject = $mconf['prefijo'] . 'Entrega '; + $subject = '[' . $mconf['prefijo'] . '] Entrega '; if ($tipo == R_OK) $estado = 'ACEPTADA'; else $estado = 'RECHAZADA'; $subject .= $estado; @@ -173,7 +176,7 @@ Return-Path: {$mconf['admin']} X-Mailer: $NAME $VERSION X-Priority: 5 EOT; - mail($to, $subject, $body, $headers); + mail(decode_header($to), $subject, $body, $headers); return true; } @@ -182,7 +185,8 @@ EOT; */ function validar_cabecera($hdr) { // Subject: padron nro_ej nro_entrega clave_alumno - if (preg_match('/^\s*(\d{5})\s+([1-4])\.([12])\s+(.*)$/', $hdr->subject, $m)) { + $subject = decode_header($hdr->subject); + if (preg_match('/^\s*(\d{5})\s+(\d)\.(\d)\s+(.*)$/', $subject, $m)) { return array_slice($m, 1, 5); } return false; @@ -190,15 +194,16 @@ function validar_cabecera($hdr) { function preparar_entrega($intento, $mbox, $msgid, $dir) { logs('Acá debería verificar el cuerpo del mensaje', DEBUG); + $path = "$dir/" . $intento->path('intentos'); $mail = imap_fetchstructure($mbox, $msgid); + if (!mkdir_p($path)) return 'No se pudo crear el directorio'; foreach ($mail->parts as $id => $part) { $fname = part_filename($part); if ($fname) { logs("Escribiendo archivo '$fname' [enc={$part->encoding}]", DEBUG); - $body = imap_fetchbody($mbox, $msgid, $id + 1); - $path = "$dir/" . $intento->path('intentos'); - if (!mkdir_p($path)) return 'No se pudo crear el directorio'; - if (!file_put_contents("$path/$fname", decode_body($body, $part->encoding))) return "Error al guardar el archivo $fname"; + $body = decode_body(imap_fetchbody($mbox, $msgid, $id + 1), $part->encoding); + if (!$body) return "El archivo '$fname' está vacío"; + if (!file_put_contents("$path/$fname", $body)) return "Error al guardar el archivo $fname"; } //if (part_is_source($part) $has_sources = true; //elseif (part_mime_type($part) == 'application/zip') $has_sources = true; @@ -290,4 +295,13 @@ function fix_eol($str) { return str_replace("\r\n", "\n", $str); } +function decode_header($str) { + $elems = imap_mime_header_decode($str); + $result = ''; + foreach ($elems as $elem) { + $result .= $elem->text; + } + return $result; +} + ?> \ No newline at end of file