Ticket #1664 (closed defeito: fixed)
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.
Attachments
Change History
comment:1 Changed 12 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 12 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 12 years ago by brunocosta
- Owner changed from ninguem to brunocosta
- Status changed from new to assigned
comment:4 in reply to: ↑ 2 Changed 12 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 12 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 12 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 12 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 12 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 12 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 12 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.