Push email para um servidor apache / php

3

Criamos um serviço da web que precisa verificar constantemente as mensagens de e-mail. Basicamente, um usuário nos envia um email, e o servidor deve fazer ações com base nesse email. Nós poderíamos usar um script PHP crontab que verifica novas mensagens a cada minuto, com o POP. Mas isso é ofensivo para o popserver e não muito eficiente (1min é muito longo).

Mas li sobre o e-mail PUSH usando o IMAP em dispositivos móveis. No meu caso, não é um dispositivo móvel, mas um servidor da Web.

Posso enviar um e-mail para meu servidor da Web e fazer com que ele execute um script PHP? Estamos usando o GMail como servidor POP / SMTP / IMAP.

EDIT 1 a partir das respostas, nós descobrimos:

  1. deve haver um processo em execução 24 horas por dia, 7 dias por semana (daemon) no meu servidor da web, verificando se há e-mails

  2. esse daemon pode se comunicar com o Gmail usando: i) POP com NOOP ou ii) IMAP com IDLE

Qual é o melhor? POP ou IMAP? O Google parece convidar mais o uso do IMAP.

Eu não quero abusar do gmail (qual é o seu "uso aceitável" para verificar e-mails? a cada 10 segundos?

obrigado!

    
por Trident Splash 01.07.2009 / 04:32

6 respostas

3

Se você usar o POP3 e manter a conexão aberta, talvez não receba novas mensagens - não me lembro se é parte da especificação ou não, mas os servidores POP3 com os quais lidei essencialmente bloqueiam a caixa de correio para o duração da sessão POP3, para que nenhum novo email chegue (aparecendo) enquanto a sessão POP3 estiver aberta (STAT e UIDL e LIST e LAST - sempre retornam a mesma resposta até você SAIR e re-login).

Se você usar o IMAP, poderá manter a conexão IMAP aberta e apenas consultá-la periodicamente para novas mensagens. Isso é muito mais barato do que fazer login, verificar e desconectar se você quiser fazer isso a cada 10 segundos.

Eu não executaria o poller no servidor da Web de front-end. Eu teria um processo de back-end de longa execução (daemon) que busca alterações e se comunica via algum sistema de transmissão de mensagens para o aplicativo PHP no servidor frontend. ("message passing system" pode ser tão simples quanto escrever pedidos e informações de status para uma tabela em um banco de dados compartilhado).

Você pode escrever o daemon poller em PHP, se preferir. Você pode ficar mais extravagante com este processo & adapte-o a uma mudança de caixa de correio: se a caixa de correio do usuário mudar constantemente, permaneça conectada e sondar com frequência. Se a caixa de correio não mudar, desconecte a conexão IMAP e verifique-a novamente 5 minutos depois.

James

    
por 01.07.2009 / 09:36
2

Se você controla seu servidor web: Você pode usar o gmail para encaminhar os e-mails para o servidor web e então usar um pipe em seu arquivo / etc / aliases para enviar os e-mails para um script php que pode lê-los a partir do padrão. (Ou o mecanismo equivalente para enviar e-mails para um script em qualquer servidor de e-mail (MTA) que você escolher, eu pessoalmente uso o exim.) Basicamente, seu arquivo de aliases seria

username: |/var/www/myphpscript.php

e o myphpscript.php leria o e-mail no STDIN e atuaria nele.

Se você não controlar seu servidor web: O IMAP suporta um comando IDLE que permite que um cliente conecte-se ao servidor enquanto aguarda a chegada de um email. (Isso é um pouco como uma notificação PUSH, exceto que o cliente deve estabelecer e manter uma conexão aberta com o servidor) Você poderia escrever um script que abriria uma conexão com o servidor IMAP do gmail e usaria o comando IDLE para aguardar um novo email . Isso exigiria a capacidade de executar um processo persistente no servidor. Pode haver uma maneira de usar algo como o fetchmail para fazer isso e depois passar o email para um script php.

Espero que ajude!

    
por 01.07.2009 / 06:22
1

Se você estivesse hospedando seu próprio servidor de e-mail, poderia usar algo como procmail . Eu não acho que há uma opção para automatizar o tratamento de e-mail.

    
por 01.07.2009 / 04:48
1

Se você tem direitos administrativos no servidor de e-mail, por que não escrever um script daemon / perl / shell / php para verificar a existência do arquivo e, em seguida, dormir 5 segundos (ou por mais curto que seja o intervalo)? e verifique novamente. Isso é tudo que seu servidor de email "push" fará, e você estará eliminando uma camada de complexidade.

EDITAR

Desculpe, eu entendi mal. Eu pensei que você controlasse o servidor pop.

Você sabe qual software o servidor pop está executando? Isso ajudaria muito a saber se ele suporta algum tipo de mecanismo de envio.

EDIT 2

Confira: link

Ele suporta "NOOP", para evitar que uma conexão inativa exceda o tempo limite. Soa como o que você precisa para implementar um cliente PHP POP3.

    
por 01.07.2009 / 04:48
0

Você não pode enviar o POP, é um protocolo estritamente do tipo "venha e pegue".

Você é capaz de usar seu próprio servidor de email em vez do Gmail? Se isso falhar, o GMail permite o encaminhamento automático de email? Em ambos os casos, você pode configurar um servidor de e-mail, que pode disparar ações com base nesse e-mail recebido.

    
por 01.07.2009 / 05:07
0

Minha resposta provavelmente é mais relacionada à programação do que sysadmin ...

Acredito que seja possível, por meio da API do Google, escrever um script que inicie uma solicitação http de longa duração que basicamente apenas aguardará até que o e-mail esteja disponível.

A maioria dos e-mails "push" é iniciada pelo cliente. Um cliente fará uma solicitação HTTP solicitando novos e-mails e o servidor enviará uma resposta quando houver.

Eu suspeito que, se os tempos de espera de 60 segundos forem muito longos para você, convém reconsiderar sua decisão de usar o Gmail. O Gmail é muito bom para o uso normal, mas a entrega imediata de mensagens não parece ser algo em que eles focam seu sistema. O Google não oferece muitas garantias sobre o envio rápido de mensagens.

Se você executar seu próprio servidor, então, há muitas opções para configurar o servidor de correio para entregar a mensagem a um processo. Verifique os documentos para esse servidor de e-mail.

    
por 01.07.2009 / 08:02