Ticket #1664 (closed defeito: fixed)

Opened 10 years ago

Last modified 10 years ago

Envio de mensagem com anexo maior que 20MB

Reported by: yasmin.kamal Owned by: brunocosta
Priority: normal Milestone: Expresso 2.2.0-beta
Component: ExpressoMail Version: branch 2.2
Severity: grave Keywords:
Cc: WorkGroup: Centro de Testes

Description

Plataforma de Teste: FF3 - Win

Ao tentar enviar uma mensagem com um anexo maior que 20MB o sistema envia a mensagem sem o anexo e não apresenta nenhuma mensagem de erro.

Caso de teste:  http://testlink.expressolivre.org/lib/execute/execSetResults.php?version_id=6651&level=testcase&id=1730&tplan_id=2664&setting_build=15&setting_platform=4

Attachments

anexo_20mb.doc Download (500.5 KB) - added by yasmin.kamal 10 years ago.

Change History

Changed 10 years ago by yasmin.kamal

comment:1 Changed 10 years ago by diegomoreno

Isso ocorre devido a uma diretiva do php ele não envia dados do formulário caso o tamanho ultrapasse o valor definido na diretiva 'post_max_size' em php.ini que nesse caso deve ser 20 MB uma solução é notificar ao usuário que o tamanho máximo foi atingido, uma solução semelhante pode ser encontrada no ticket #1623

comment:2 follow-up: ↓ 4 Changed 10 years ago by rodsouza

A questão da configuração das diretivas do PHP não está diretamente ligadas à preferência do ambiente, ou seja, o tamanho máximo permitido do arquivo a ser enviado não refere-se à configuração das diretivas do PHP, são situações completamente distintas.

comment:3 Changed 10 years ago by brunocosta

  • Owner changed from ninguem to brunocosta
  • Status changed from new to assigned

comment:4 in reply to: ↑ 2 Changed 10 years ago by brunocosta

Replying to rodsouza:

A questão da configuração das diretivas do PHP não está diretamente ligadas à preferência do ambiente, ou seja, o tamanho máximo permitido do arquivo a ser enviado não refere-se à configuração das diretivas do PHP, são situações completamente distintas.

Na verdade esse preferencia está completamente furada.

Tem duas diretivas sobre isso no PHP: upload_max_filesize, que controle qual é o tamanho do maior arquivo que pode ser mandado pro servidor e 'post_max_size' que controla o tamanho total do post.

A configuração do expresso seria de tamanho total dos anexos como se pode ver na função send_mail da classe imap_functions, mas ela é limitada a diretiva 'upload_max_filesize' do PHP na hora de configurar. O que acontece é que se o tamanho total do POST passa da diretiva 'post_max_size' e nada é enviado o expresso está tratando na função 'return_save' do main.js, porque a resposta do servidor é 'Post-Content-Length'. Agora se o total do POST é menor que a diretiva mas um dos anexos é mair que upload_max_filesize os testes feitos na função send_mail da classe imap_functions não funcionam, pra começar porque ele trata a variável "$paramsfiles?" onde os arquivos que deram algum erro no upload nem aparecem.

Eu estou tratando isso verificando no $_FILES se algum arquivo tem o erro 'UPLOAD_ERR_INI_SIZE' que acontece quando um arquivo é maior que a diretiva 'upload_max_filesize'.

comment:5 Changed 10 years ago by brunocosta

  • Status changed from assigned to closed
  • Resolution set to fixed

Resolvido na [3900]

Na função 'send_mail' do imap_functions os dados dos anexos (variável $attachments) passa a vir da variável $_FILES e não da $param['files'] como hoje em dia. Na iteração do array $attachments para que eles sejam adicionados a mensagem a ser enviada é testado se cada arquivo tem o código de erro 'UPLOAD_ERR_INI_SIZE' que indica que o tamanho dele passou da diretiva upload_max_filesize do PHP e o arquivo não foi enviado. Nesse caso é retornado o erro "message file too big" que aparecerá para o usuário.

comment:6 follow-up: ↓ 7 Changed 10 years ago by rodsouza

A preferência não está furada e sim a configuração do ambiente.

A alteração não deveria ser neste ponto, está havendo uma mistura de conceitos como houve no FileManager?.

Uma coisa não tem nada a ver com a outra.

comment:7 in reply to: ↑ 6 Changed 10 years ago by brunocosta

Replying to rodsouza:

A preferência não está furada e sim a configuração do ambiente.

A alteração não deveria ser neste ponto, está havendo uma mistura de conceitos como houve no FileManager?.

Uma coisa não tem nada a ver com a outra.

Essa preferencia não faz sentido como está hoje, ela limita a soma do tamanho dos anexos mas ela é limitada a diretiva upload_max_filesize que limita o tamanho de cada arquivo. Ela ou devia ser limitada pelo post_max_size e se comportar como é hoje ou pelo upload_max_filesize e limitar o tamanho de anexos individuais. O problema no código como estava é que se o arquivo fosse maior que upload_max_filesize mas menor que post_max_size o email seria enviado sem erro mas sem o arquivo. Do jeito que estava a preferencia só limitava arquivos menores que upload_max_filesize cujos tamanhos somados fossem maiores que ela, o que pra mim não faz muito sentido.

comment:8 follow-up: ↓ 9 Changed 10 years ago by rodsouza

Novamente são situações diferentes! A ambas fazem sentido, cada qual em seu contexto.

A primeira é a limitação administrativa.

A segunda é a limitação de ambiente.

Se for feito uma limitação não deve ser no envio, e sim nas definições administrativas.

Muitas administradores não são os responsáveis pelos servidores assim não pode alterar as diretivas.

Além de que não pode-se exigir do administrador que ele saiba de conceitos técnicos.

comment:9 in reply to: ↑ 8 Changed 10 years ago by brunocosta

Replying to rodsouza:

Novamente são situações diferentes! A ambas fazem sentido, cada qual em seu contexto.

A primeira é a limitação administrativa.

A segunda é a limitação de ambiente.

Se for feito uma limitação não deve ser no envio, e sim nas definições administrativas.

Muitas administradores não são os responsáveis pelos servidores assim não pode alterar as diretivas.

Além de que não pode-se exigir do administrador que ele saiba de conceitos técnicos.

Eu entendo isso, o que não faz sentido que eu falei é ela ser limitada pela upload_max_filesize já que ela limita o tamanho da soma dos anexos. De qualquer forma do jeito que estava antes gerava o bug relatado.

comment:10 Changed 10 years ago by rodsouza

As duas diretivas do php são muito importantes, pois existe a necessidade de controle da utilização do recurso do hardware, e ambas as diretivas realizam esse controle.

O Expresso suporta perfeitamente 1Gb de anexo, entretanto dependendo do hardware não é possível trabalhar com arquivos maiores que 10Mb. Se for somado todos os arquivos tranquilo, mas um único inviável.

Note: See TracTickets for help on using tickets.