Modificar tamanho máximo de anexos com o PHPMailer

567 views
Skip to first unread message

Andrews Lince

unread,
Sep 19, 2009, 1:56:36 PM9/19/09
to LISTA PHP
Salve, pessoal!!!

Estou utilizando a nossa querida classe PHPMailer para enviar e-mails
com anexos. Quando tento enviar um anexo com mais 8MB (+-), aparece a
seguinte mensagem:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to
allocate 13866186 bytes) in C:\xampp\htdocs\portalAmazonia\www\pclasses
\class.phpmailer.php on line 1374

Gostaria de saber se existe alguma forma de setar um tamanho máximo,
pois preciso enviar um vídeo que tenha até 10MB. Tentei utilizar um
hidden no formulário como segue abaixo, mas não funcionou...

<input type="hidden" name="MAX_FILE_SIZE" value="100000000">

Tenho que setar esse valor no php.ini ou isso é configurável pelo
PHPMailer? Já procurei no google mas não encontrei nenhum post
explicando como modificar o tamanho máximo.


Obrigado pela ajuda

André Oliveira

unread,
Sep 19, 2009, 2:32:09 PM9/19/09
to list...@googlegroups.com
altera no php.ini, o memory_limit e o upload_max_filesize

Abraço,


2009/9/19 Andrews Lince <andrew...@gmail.com>

felipe moraes

unread,
Sep 19, 2009, 2:23:54 PM9/19/09
to list...@googlegroups.com
mas aí parece que o php tá gastando muita memória .. reveja o modo como tá usando o phpmailer

2009/9/19 Andrews Lince <andrew...@gmail.com>

Andrews Lince

unread,
Sep 19, 2009, 2:41:12 PM9/19/09
to list...@googlegroups.com
Felipe, esse é o código que eu tô usando. Uma coisa que esqueci de mencionar (desculpem) é que estou enviando estes e-mails para uma conta de teste que criei no meu servidor local. Será que isso tem problema?


/* Envio de e-maiol através da classe PHPMailer */

require($path."pclasses/class.phpmailer.php");

//Faço a chamada da classe
$Email = new PHPMailer();
//Fa classe, há a opção de idioma, setei como br
$Email->SetLanguage("br");
//Esta chamada diz que o envio será feito através da função mail do php. Você mudar para sendmail, qmail, etc
//Se quiser utilizar o programa de email do seu unix/linux para enviar o email
$Email->IsMail();
//Ativa o envio de e-mails em HTML, se false, desativa.
$Email->IsHTML(true);
//Email do remetente da mensagem
$Email->From = "andrew...@gmail.com";
//Nome do remetente do email
$Email->FromName = "Andrews Lince";
//Endereço de destino do email, ou seja, pra onde você quer que a mensagem do formulário vá?
$Email->AddAddress("postmaster@localhost");
//Informando no email, o assunto da mensagem
$Email->Subject = "VC no Portal | NOTÍCIA";

//Anexa as mídias ao e-mail
if ($_FILES['fileFoto1']['name'] != "") {
$Email->AddAttachment($_FILES['fileFoto1']['tmp_name'], $_FILES['fileFoto1']['name']);  //Anexa a 1ª foto
}
if ($_FILES['fileFoto2']['name'] != "") {
$Email->AddAttachment($_FILES['fileFoto2']['tmp_name'], $_FILES['fileFoto2']['name']);  //Anexa a 2ª foto
}
if ($_FILES['fileFoto3']['name'] != "") {
$Email->AddAttachment($_FILES['fileFoto3']['tmp_name'], $_FILES['fileFoto3']['name']);  //Anexa a 3ª foto
}
if ($_FILES['fileVideo']['name'] != "") {
$Email->AddAttachment($_FILES['fileVideo']['tmp_name'], $_FILES['fileVideo']['name']);  //Anexa o vídeo
}

//Define o texto da mensagem (aceita HTML)
$Email->Body .= "<style type='text/css'>
                          #logo { margin:20px 0px; width:100%; text-align:center; font-family:'Trebuchet MS'; font-weight:bolder; font-size:23px; color:#4B891D; }
                          #mensagem { background-color:#33451c; color:#eff8e5; }
                          #cabecalho { float:left; padding:10px 20px; color:#4A4A4A; margin:0px 0px 25px 20px; font-family:'Trebuchet MS'; font-size:13px; font-style:italic; border-top:3px #4A4A4A double; border-bottom:3px #4A4A4A double; }
                          #conteudoMensagem { clear:both; margin:30px 0px 0px 40px; font-family:'Trebuchet MS'; }
                        </style>

                        <body>
                          <div id='logo'>
                            <img src='".$urlPortal."pimg/icone-vcnoportal.gif' alt='Logo VC no Portal' width='165' height='30' /><br />
                            Envio de not&iacute;cia
                          </div>
                          <div id='cabecalho'>
                            <strong>Enviada por:</strong> ".utf8_encode($dadosUsuario[0]['nome'])."<br />
                            <strong>E-mail:</strong> ".$dadosUsuario[0]['email']."<br />
                            <strong>Estado:</strong> Amazonas<br />
                            <strong>Cidade:</strong> Manaus<br />
                          </div>
                          <div id='conteudoMensagem'>Descri&ccedil;&atilde;o da not&iacute;cia:<br /><br />".$_POST['txaDescricaoNoticia']."</div>
                        </body>";

// verifica se está tudo ok com oa parametros acima, se nao, avisa do erro. Se sim, envia.
if($Email->Send()) {
echo "<script>alert('Sua mensagem foi enviada com sucesso!');</script>";
} else {
echo "Erro: " . $mail->ErrorInfo;
echo "<script>alert('Falha no envio da mensagem');</script>";
}

$Email->ClearAllRecipients();
$Email->ClearAttachments();

2009/9/19 felipe moraes <feli...@gmail.com>



--
Andrews Lince Andrade da Costa
Desenvolvedor Web
skype: andrews.lince
msn: andrews_lince
twitter: andrews_lince

Andrews Lince

unread,
Sep 19, 2009, 2:56:37 PM9/19/09
to list...@googlegroups.com
CONSEGUI!!!!!!

Felipe, realmente o script estava demandando um processamento de memória além do valor definido no memory_limit do php.ini. No meu caso ele estava com o valor 32M, e só alterei para 64 (o dobro). Funcionou maravilhosamente.


Muito obrigado.

2009/9/19 Andrews Lince <andrew...@gmail.com>

felipe moraes

unread,
Sep 19, 2009, 2:47:38 PM9/19/09
to list...@googlegroups.com
Observe que $Email->AddAttachment( lê o arquivo anexo ..

e o coloca como parte da mensagem ..

se os arquivos forem grande .. claro que vai exceder a memória ..

limite via script o tamanho máximo de todos os arquivos anexados .. exemplo, tudo junto deve ter no máximo 10M ..

aí no php.ini vc coloca limit de memória de uns 15 ou 20M .. já q além do arquivo virar texto.. ainda tem o corpo da mensagem ..

para valores mais exatos.. veja aí com a galera.. fuiz

Andrews Lince

unread,
Sep 19, 2009, 3:56:47 PM9/19/09
to list...@googlegroups.com
Estou fazendo isso da seguinte forma (só não coloquei na mensagem anterior... rsrsrsrs...).

CODE

//Define o tamanho máximo para a soma do tamanho das três fotos que podem ser enviadas
$max_tam_fotos = 1024 * 1024 * 5; //5MB

//Define o tamanho máximo para o tamanho do vídeo que pode ser enviado
$max_tam_video = 1024 * 1024 * 10; //10MB

//Verifica se a soma do tamanho das três fotos é maior que o limite definido anteriormente
if (($_FILES['fileFoto1']['size'] + $_FILES['fileFoto2']['size'] + $_FILES['fileFoto3']['size']) > $max_tam_fotos) {
echo "<script>alert('Falha no envio da notícia. O tamanho máximo das fotos é 5MB!');</script>";
$falhaEnvio = true;
}
//Verifica se o tamanho do vídeo é maior que o limite definido anteriormente
elseif ($_FILES['fileVideo']['size'] > $max_tam_video) {
echo "<script>alert('Falha no envio da notícia. O tamanho máximo do vídeo é 10MB!');</script>";
$falhaEnvio = true;
}

Corrijam-se se eu estiver fazendo errado.


Abraços

2009/9/19 felipe moraes <feli...@gmail.com>
Reply all
Reply to author
Forward
0 new messages