Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
E ae povo.. é o seguinte, tenho um sistema e estou tendo um probleminha com lentidão, estou utilizando o phpmailer em um formulário que dispara e-mails para quem deve dar andamento no formulário.
E o problema é que as vezes tenho que disparar uns 7 e-mails para pessoas diferentes e eles não podem ir como cópia, pois cada e-mail é personalizado.
Estou utilizando a função + ou - dessa forma.. que é o mais facil de demonstrar, estou mandando repetir 10x o envio
<?php
require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
function enviaEmail($para_nome, $para_email, $assunto, $mensagem) {
global $mail;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = "smtp.gmail.com";
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->IsHTML(true);
$mail->Username = "wolfphw@gmail.com";
$mail->Password = "senha";
$mail->setFrom('wolfphw@gmail.com', 'Sistema de envio de e-mail');
$mail->Subject = $assunto;
$mail->Body = $mensagem;
$mail->addAddress($para_email, $para_nome);
$mail->send();
}
for ($i=1; $i<=10; $i++) {
$nome = "wolfphw_".$i;
$email = "wolfphw_".$i."@gmail.com";
$assunto = "Teste assunto 0".$i;
$mensagem = "Teste mensagem 0".$i;
enviaEmail($nome, $email, $assunto, $mensagem);
}
?>
Eu notei que ele para repetir só depois que confirma o envio no $mail->send();
Alguém sabe como resolver ou uma outra solução para isso???
Não queria ficar esperando esse retorno...
Então, eu estou utilizando um servidor na locaweb...
Que tipo oke noto parece que ele fazer o seguinte.. como nesse exemplo eu estou simulando 10 e-mails... tipo ele executa uma vez e espera ter um retorno de confirmação para executar outra vez, dai isso que está me ferrando... :(
Queria algo tipo em segundo plano, onde a página do submit não esperasse o envio de tudo para mudar de página... No meu caso ele espera o envio de tudo e depois muda de página...
Estou pensando em criar uma tabela para salvar registros do e-mails que devem ser enviados, dai depois na página chamo via AJAX uma página que executa um script para pegar os e-mails não enviados e os envia.. é uma boa prática isso?
Em vez do ajax, use o Cron. Assim dispensa interação de usuários para que os emails da fila sejam enviados
Outra saída é usar sistema de filas (queues), já que o PHP, infelizmente, não permite criar threads :(
Vou olhar isso... vlw
Acabei fazendo da forma que imaginei...
Fiz ele popular uma tabela no banco, e depois no sistema mando executar um AJAX para verificar nessa tabela o que não foi enviado e envia.. e foi criado um Cron tb para envio caso tenha ficado algum para trás.. mas ele só roda de madrugada..
pode finalizar já
A vantagem do cron é que a ação (disparo) poderá ocorrer sem que você precise iniciar a aplicação...
A vantagem do cron é que a ação (disparo) poderá ocorrer sem que você precise iniciar a aplicação...
Isso.. nessa necessidade já tenho configurado..
Eu precisava de algo na hora do cadastro tb :D
Dessa forma que fiz matou minha necessidade...
Como você está utilizando smtp externo é provável que a culpa seja da conexão com o servidor externo, essa lentidão é constante? Se sim, você tentou enviar de localmente ou utilizando outro servidor de smtp?