Pergunta

Qual é a maneira mais adequada de enviar e-mails com no mínimo 1.000 ou mais em PHP?Alguma técnica confiável de enfileiramento de e-mail capaz de lidar com isso?­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Foi útil?

Solução

Você pode simplesmente inserir seus e-mails em uma tabela de banco de dados Mail Queue e fazer com que um processo separado verifique a fila e envie em lote um determinado número de uma vez.

Outras dicas

Existe uma solução testada para isso:PERA Mail_Queue

Funciona bem para mim.

como sugeriu Mercutio, eu inseriria um novo registro em uma tabela de fila de correio para cada e-mail aguardando para ser enviado e, em seguida, usaria um processo separado (como um CRON) para verificar periodicamente a tabela em busca de itens na fila.

se algum e-mail estiver na fila (e o e-mail não for personalizado para cada destinatário), eu agruparia os e-mails por domínio e enviaria blocos juntos para reduzir o número total de e-mails que devem ser enviados, ou seja,se você tiver 1.000 e-mails na fila e 250 forem para contas do Gmail, eu enviaria os 250 em 25 blocos de 10 (lembre-se de enviar aos destinatários Cco para evitar que eles se vejam).

para realmente enviar o e-mail que eu usaria Correio PERA sobre a função mail() do php

depois de enviar o e-mail, exclua os registros da fila ou altere um sinalizador de status para mostrar que foi enviado e faça um loop - eu também adicionaria um contador para controlar os e-mails que não foram enviados e removê-los após x tentativas malsucedidas

Para superar os problemas de tempo limite, eu também (dependendo da situação) - defina o set_time_limit () para x segundos e acompanhe o tempo de execução do script (matando o script após (x -1) segundos) - chame o script do comando do comando linha para evitar tempos limite - defina um limite para o número de emails que o script poderia enviar uma execução

Claro, a tabela do banco de dados pode ser uma ideia.Mas que tal enviar 1.000 e-mails com um anexo de 2 MB?você teria que levar isso em consideração também.Eu mesmo tive o problema e acabei escrevendo o e-mail no banco de dados e os arquivos no sistema de arquivos.O script de e-mail que usei leu os registros do banco de dados e tentou buscar os anexos para enviar.

Tem certeza de que precisa colocar esse e-mail na fila sozinho?

Basta entregar todas as mensagens ao agente de transferência de mensagens da máquina local (sendmail...) e deixar que ele cuide do enfileiramento e do envio.Afinal, foi para isso que foi projetado.

Em outras palavras:não se preocupe com isso!

Geralmente confiei em um hack.Eu tenho uma lista de endereços de e-mail no banco de dados e, em seguida, uso um meta-redirecionamento para si mesmo com um parâmetro 'offset' crescente que especifica qual linha do banco de dados estou fazendo.Os redirecionamentos de servidor causam problemas porque os navegadores presumem que o tempo gasto indica um loop infinito.

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