Enviando email com autenticação smtp (muito lento)

1,541 views
Skip to first unread message

Filipe Bicca

unread,
May 12, 2011, 1:57:02 PM5/12/11
to Zend Framework Brasil
Problema: Formulário do site que fazem o envio de emails estão
demorando mais do que o normal para executar.

Senhores, segue abaixo o código semelhante ao que eu aplico em meu
site, vale lembrar que o envio funciona normalmente, o problema é a
demora entre o clique no form, e o resultado de que foi enviado com
sucesso.

#Ambiente revenda locaweb

$config = array('auth' => 'login',
'username' => 'minha...@dominio.com.br',
'password' => '123456',
'port' => 587);

$transport = new Zend_Mail_Transport_Smtp('smtp.dominio.com.br',
$config);

$mensagemEmail = '<h1>Exemplo</h1>';

$mail = new Zend_Mail('UTF-8');
$mail->setBodyHtml($mensagemEmail);
$mail->setFrom('minha...@dominio.com.br', 'Teste');
$mail->addTo('minha...@dominio.com.br', 'Teste');
$mail->setSubject('Testando email');
$mail->send($transport);

Tanto para envio no mesmo domínio quanto para fora demora o mesmo
tempo, alguém sabe o que pode ser?

Vinicius Gava

unread,
May 12, 2011, 2:07:15 PM5/12/11
to zfbr...@googlegroups.com
Amigo de quanto é a demora? Eu já fiz envio de email usando smtp do google, e demora sim para enviar mas acho que é normal, algo em torno de uns 6~10s.


--
Essa mensagem faz parte do grupo "zfbrasil" no Google Groups.
Para escrever neste grupo, envie um email para zfbr...@googlegroups.com
Para se desligar do grupo, envie um email para zfbrasil-u...@googlegroups.com
Mais informações, visite o grupo em http://groups.google.com/group/zfbrasil?hl=pt-BR

Diego Noguês

unread,
May 12, 2011, 2:36:56 PM5/12/11
to zfbr...@googlegroups.com
Já tentou usar o ip do servidor no lugar de smtp.dominio....?
--
Diego Noguês
di...@projecttus.com
www.projecttus.com
(41) 4063 7007 (Ramal 7008)
about.me/diegonogues

Filipe Bicca

unread,
May 12, 2011, 3:14:22 PM5/12/11
to Zend Framework Brasil
Fica entre esses 6~10s sim Vinicius, na minha opinião é um tempo
considerável mas tolerável, mas para cliente é inaceitável hehehe

Farei um teste tentando por o ip direto.

Pensei que talvez fosse algum parâmetro a mais, pois antes ficava
muito lento, ai adicionei o parâmetro port e já melhorou bastante, mas
não o suficiente para o cliente achar bom =)

Eu confirmo aqui se funcionar a questão do IP.
Obrigado

On 12 maio, 15:36, Diego Noguês <diego.s...@gmail.com> wrote:
> Já tentou usar o ip do servidor no lugar de smtp.dominio....?
>
> Em 12 de maio de 2011 15:07, Vinicius Gava <gava.vinic...@gmail.com>escreveu:
>
>
>
>
>
>
>
>
>
> > Amigo de quanto é a demora? Eu já fiz envio de email usando smtp do google,
> > e demora sim para enviar mas acho que é normal, algo em torno de uns 6~10s.
>
> > Em 12 de maio de 2011 14:57, Filipe Bicca <bicca.fil...@gmail.com>escreveu:
>
> > Problema: Formulário do site que fazem o envio de emails estão
> >> demorando mais do que o normal para executar.
>
> >> Senhores, segue abaixo o código semelhante ao que eu aplico em meu
> >> site, vale lembrar que o envio funciona normalmente, o problema é a
> >> demora entre o clique no form, e o resultado de que foi enviado com
> >> sucesso.
>
> >> #Ambiente revenda locaweb
>
> >> $config = array('auth' => 'login',
> >>                    'username' => 'minhaco...@dominio.com.br',
> >>                    'password' => '123456',
> >>                    'port' => 587);
>
> >> $transport = new Zend_Mail_Transport_Smtp('smtp.dominio.com.br',
> >> $config);
>
> >> $mensagemEmail = '<h1>Exemplo</h1>';
>
> >> $mail = new Zend_Mail('UTF-8');
> >> $mail->setBodyHtml($mensagemEmail);
> >> $mail->setFrom('minhaco...@dominio.com.br', 'Teste');
> >> $mail->addTo('minhaco...@dominio.com.br', 'Teste');

Filipe Bicca

unread,
May 12, 2011, 3:34:43 PM5/12/11
to Zend Framework Brasil
Não deu certo com ip. Alguém tem mais alguma sugestão?

Carlos Filho

unread,
May 12, 2011, 2:50:43 PM5/12/11
to zfbr...@googlegroups.com
Olá Filipe,

Você pode utilizar o Zend_Queue para enviar emails em background. http://tinyurl.com/5wkfrr8
A entrega dos emails não depende do Zend, e sim do servidor de smtp. É interessante você configurar o SPF no DNS para que as mensagens não caiam no spam. Assim, quando o servidor de smtp verificar a autenticidade do domínio pelo reverse do DNS, não vai deixar você na mão.

--
Carlos Filho

Keoma Cherulli

unread,
May 12, 2011, 4:13:27 PM5/12/11
to zfbr...@googlegroups.com
Olá,
 
Aqui não demora nada pra enviar. Vai na mesma hora. Mesmo rodando o PHP localmente.
Da uma olhada no seu servidor SMTP.
Tenta enviar um email via telnet e veja se demora também.

2011/5/12 Carlos Filho <carlos...@gmail.com>

--

Vinicius Gava

unread,
May 12, 2011, 5:04:28 PM5/12/11
to zfbr...@googlegroups.com
Acho dificil conseguir menor tempo que isso por smtp. Você não consegue enviar direto sem smtp, se você não por um adapter ele vai usar a função mail, acho que ela deve funcionar na locaweb. faz um teste.

Keoma Cherulli

unread,
May 12, 2011, 5:06:07 PM5/12/11
to zfbr...@googlegroups.com
Se estiver usando na locaweb já era. Email lá é forca.

2011/5/12 Vinicius Gava <gava.v...@gmail.com>

Cesar Scur

unread,
May 12, 2011, 8:35:33 PM5/12/11
to zfbr...@googlegroups.com
Na teoria seria deixar esse processo assíncrono. Assim o cara clica enviar, a tela retorna dizendo q deu certo e o seu servidor resolve isso quando der.
Na pratica acho que a solução é zend_queue mesmo... Não conhecia e achei bem legal.

Alguém tem um exemplo de como consumir o conteúdo do queue? Pra ser mais especifico, de como rodar um script que consuma o queue de maneira assíncrona.

2011/5/12 Keoma Cherulli <keom...@gmail.com>



--
Grato,
Cesar Scur



Keoma Cherulli

unread,
May 12, 2011, 8:53:42 PM5/12/11
to zfbr...@googlegroups.com
Olá Colegas,
 
Discordo totalmente em dar a falsa impressão que o e-mail do cliente foi enviado.
Volto a afirmar: Essa operação normalmente é muito rápida.
O CodeIgniter tem uma classe smtp também. As vezes você pode testar com ela.


 
2011/5/12 Cesar Scur <csr...@gmail.com>

Fabio de Souza Mendes

unread,
May 13, 2011, 12:51:23 AM5/13/11
to zfbr...@googlegroups.com
Olá,

Um truque que aprendi, analisando alguns sistema opensource como o Mantis, é gravar o e-mail em uma tabela ou arquivo, e
rodar um cron em um curto intervalo de tempo para enviar os e-mails. 

Nesse processo basicamente cada e-mail entra em uma fila. Para tratamento do envio, as possibilidades são maiores.

Fabio


2011/5/12 Keoma Cherulli <keom...@gmail.com>



--
Fabio S. Mendes
http://meadiciona.com/fatorx

Wesley Willians

unread,
May 13, 2011, 7:56:14 AM5/13/11
to zfbr...@googlegroups.com
Sinceramente há algo errado, faço meus envios muito rapidamente. Mesmo utilizando smtp do google. 

--
@wesleywillians
www.schoolofnet.com


2011/5/13 Fabio de Souza Mendes <fbi...@gmail.com>

Carlos Filho

unread,
May 13, 2011, 2:03:14 AM5/13/11
to zfbr...@googlegroups.com
Existe também outra técnica para executar tarefas em segundo plano utilizando a ferramenta Gearman. Ainda não a implementei, mas há um texto bastante explicativo neste link sobre o assunto http://tinyurl.com/3lmtuef

Para quem não conhece, o Gearman é um servidor de tarefas que permite uma série de implementações bastante vantajosas para quem precisar rodar serviços pesados constantemente. Seja alimentar um banco com muitos feeds, ou enviar emails, enfim, a imaginação é o limite.

Quanto ao envio do email, existem classes de validação do próprio Zend que permitem testar os emails e domínios antes do envio. Isso sim é realmente lento, uma vez que se pode bloquear e permitir diversos tipos de restrições. Para quem tiver curiosidade sobre o poder dessas validações, procure por "EmailAddress" neste link.

Acredito que seja mais importante o form responder rápido, porque o smtp pode dar erro de qualquer forma. Como já disse, o email não depende do Zend, e sim do smtp. Caso ele falhe, vai ser lento do mesmo jeito, segundo o Filipe relata.



--
Carlos Filho

Vinicius Gava

unread,
May 13, 2011, 8:29:28 AM5/13/11
to zfbr...@googlegroups.com

Gearman acho que não vai servir pra ele, se estiver usando hospedagem compartilhada. Seu problema de email iria facilmente ser resolvido abandonando smtp e passando esse serviço pro postfix do  servidor da hospedagem. Eu mesmo parei de usar hospedagem compartilhada por esse motivo de limitação do que usar, não pode usar shell no meio das aplicações so alguns determinados comandos, limites relacionados a disparo de email, não instalar componentes que quebraria mo galho em algumas situações. Lá fora um cloud sai pouco coisa mais caro e você faz o que bem entender. Com um conhecimento básico de linux instala apache mysql, fazer isso no ubuntu é muito simples. tenho um no linode, linode.com

Em 13/05/2011 09:09, "Carlos Filho" <carlos...@gmail.com> escreveu:

Filipe Bicca

unread,
May 13, 2011, 9:35:25 AM5/13/11
to Zend Framework Brasil
Agradeço a ajuda de todos, mas chego a conclusão que o meu problema
está mais relacionado a hardware e a configuração de um ambiente
compartilhado, do que propriamente do ZF.

Percebo até uma certa demora no painel administrativo do site, na
troca de informações entre a view -> controller -> view, não sei até
que ponto isso se deve ao hardware ou a forma que programei, exemplo:

public function gravarAction() {

try {

$table = new Depoimentos();
$dados= array('nome'=>$nome, 'data'=>$data, 'mensagem'=>$mensagem,
'status'=>"Bloqueado", 'estado'=>$estado, 'email'=>$email);
$table->insert($dados);

} catch(Zend_Exception $i) {

$session->mensagem = 'Ocorreu um erro inesperado, tente
novamente mais tarde!';
$this->_redirect('/depoimentos/cadastrar/');

}

$session->mensagem = 'Depoimento enviado com sucesso!';
$this->_redirect('/index/');


}

Valeu
> Em 13/05/2011 09:09, "Carlos Filho" <carlosfilh...@gmail.com> escreveu:
Reply all
Reply to author
Forward
0 new messages