Pergunta

Estou pensando em como lidar com o envio de grandes quantidades de e -mail dos meus aplicativos da Web e se existem práticas recomendadas para isso. O StackOverflow já está rotulando isso como "subjetivo", o que pode ser até certo ponto, mas preciso saber a maneira mais bem -sucedida de implementar esse sistema ou se existe alguma abordagem padronizada.

No meu WebApp, há usuários que são chefes de grupos de 1 a 10.000 usuários. Este usuário deve poder enviar um email uma mensagem para todos esses usuários através do meu sistema. Portanto, meu sistema é responsável por enviar até 10.000 e -mails para usuários individuais para cada chefe de grupo.

Até onde eu sei, não há limite de taxa no Gmail para enviar mensagens para indivíduos (embora exista um 500 destinatário máximo).

No momento, minha configuração atual é:

  • Quando uma mensagem é enviada pelo sistema, ele entra em uma fila de e -mail.
  • Um script Cron recebe mensagens da fila a cada poucos minutos e envia esses e -mails.
  • Todo o email está ocorrendo através do servidor SMTP do Gmail.
  • O aplicativo real que faz a correspondência é o phpmailer.

Essa configuração, à medida que a base de usuários cresce, provavelmente não será suficiente. As perguntas que tenho são:

  1. Devo estar usando um servidor SMTP local?
  2. Devo usar um binário de correio na máquina local? Eu, neste caso, eu provavelmente poderia pular a fila completamente?
  3. Existe uma maneira aceita de fazer isso?

Obrigado!

Foi útil?

Solução

Com uma contagem de e -mail como "alta" como 10.000 por dia, eu não confiaria no Gmail (ou em qualquer outro) SMTP. Não que eles não possam lidar com isso, obviamente eles podem lidar com muito mais. Mas eles possivelmente não querem.

Ter um servidor SMTP local é IMO o caminho a seguir:

  • É muito fácil de configurar (apenas não deixe as pessoas usá -lo sem um esquema autêntico forte)
  • Mais moderno MTA lidar com filas de envio muito bem
  • Você não terá que lidar com o Gmail (ou outros) decidindo bloquear sua conta algum dia por motivos de cota

Outras dicas

Google App Engine

Eu escreveria isso no Google App Engine (Python) porque:

  • Escala bem.
  • Tem uma boa API de email.
  • Ele tem uma tarefa de tarefa com uma boa API para acessá -la.
  • Porque o Python é uma linguagem muito agradável.
  • É (relativamente) barato.

Php

Se eu o implementasse no PHP, eu faria

  • Encontre um bom servidor SMTP que permite enviar este volume de e -mails porque o Gmail não permitirá que você envie esse tipo de volume. Tenho certeza de que isso custará algum dinheiro.
  • Encontre uma biblioteca de e -mail de PHP decente para enviar mensagens como, por exemplo, Phpmailer, como você disse.
  • Use uma fila de mensagens como, por exemplo, BeansTalkd para colocar mensagens de email na fila e enviar email de forma assíncrona. Primeiro, porque com isso o usuário terá carga de página mais rápida. Segundo com uma fila de mensagens como o BeansTalkd, você pode regular a velocidade de enviar melhor, o que impedirá de sobrecarregar seu PC com o trabalho. Você precisará ter acesso SSH ao servidor para compilar (instalar) beanstalkd. Você pode encontrar beanstalkd em BeansTalkd
  • Você também precisaria de acesso SSH para executar um script PHP em segundo plano que processará a fila de mensagens. Você pode encontrar um-beltakd-client em PHP BeansTalkd-Client

De Php/Apache/WebPage

Esta é a página da qual você enviará mensagens para o usuário. A partir desta página, você enviará a mensagem para BeansTalkd codificando algo nas linhas disso:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

Você tem que colocar mensagens na fila de mensagens usando o comando put

Do script PHP de longa execução em segundo plano:

O código seria algo assim:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

Como eu estou dizendo, é possível com o PHP e o Google App Engine, mas eu iria para o App Engine porque é mais fácil de implementar.

O Gmail e o Google Apps o limita a cerca de 500 e -mails por dia. Não tenho certeza de como isso combina com o 500 destinatário Max, mas se você deseja enviar 10.000 e -mails, provavelmente desejará encontrar outro servidor de email. Eu pessoalmente uso um servidor local ou o SMTP do ISP ou Datacenter.

Se você estiver enviando tantos e -mails, eu recomendaria usar a fila para que o usuário não esteja sentado esperando o email ser enviado.

Tenha muito cuidado para que seu domínio não fique na lista negra como um domínio de spam. Se isso acontecer, você pode esperar que a maioria dos seus e -mails seja bloqueada, suporte, vendas etc. que, por sua vez, poderiam ser muito caros.

Em vez disso, você pode querer usar um serviço como Aweber. Eles não apenas estão configurados para lidar com essas quantidades de e -mails, mas provavelmente podem fornecer mais métricas do que você pode implementar por conta própria.

Não tenho certeza se é publicado em qualquer lugar, mas, por experiência própria, posso dizer que o Gmail colocará quinze minutos ou mais congelar sua conta se você começar a enviar centenas de mensagens por vez. Isso aconteceu comigo na semana passada. Eu acho que você deve hospedar seu próprio servidor SMTP. O uso da função Mail () geralmente coloca seu e -mail na pasta de spam de alguém.

Basta instalar o postfix na máquina local ou uma máquina na mesma LAN para obter velocidades máximas de acesso. Certifique -se de que está bem protegido do lado de fora e rapidamente acessível por dentro.

Em seguida, codifique seu script PHP para injetar diretamente os emails na fila Postfix. Isso aumentará drasticamente a velocidade de processamento da entrega de correio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top