Pregunta

Tengo una lista de alrededor de 5.000 a 10.000 (cada usuario suministrado) direcciones de correo electrónico de personas en todo el mundo, cada uno asociado con sus códigos de nombre de usuario y de lenguaje. También tengo un solo mensaje traducido a los diferentes idiomas de los usuarios que quiero un correo electrónico. Ahora, me gustaría enviar un solo correo electrónico de texto sin formato a cada una de la dirección, con el texto real del correo electrónico varía en base a la lengua del usuario, y personalizado con el nombre de usuario de la persona que estoy enviando un correo electrónico.

Debido al requisito personalizado, y el hecho de que sólo serán enviadas por correo electrónico una vez (por año o dos con una lista de usuarios se superponen pero diferente), lista de correo formal es probablemente (y preferentemente) a cabo. 3 ª parte del servicio de correo electrónico a granel también está fuera.

Haciendo caso omiso de tiempo de programación, lo que es la forma menos manualmente requiere mucho tiempo para hacer esto en PHP (preferentemente)? (Estoy escribiendo el guión (s), pero no necesariamente la persona que terminan por "pulsando el botón" para enviarlo.) El resultado ideal es la persona que envía solamente tener que escribir un solo comando para ejecutar el script (que proporciona el correo electrónico lista) y todo el correo electrónico se enviarán sin más intervención del usuario. Esto significa que yo estoy buscando para evitar cosas como la creación de puestos de trabajo cron para ejecutar el script varias veces hasta que la lista de correo electrónico se ha agotado.

Cuando esto se hizo antes de hace un año, escribí un script PHP que simplemente leer en la línea de lista de correo electrónico por línea de procesar el nombre de usuario, dirección de correo electrónico y el código de lenguaje y construir el texto del correo electrónico deseada de que antes de suministrarlo a PHPMailer para enviar de forma individual. El problema que tuve fue el guión el tiempo de espera y yo sin saber de dónde obtuvo hasta para que pueda recortar la lista de correo electrónico en el lugar correcto para empezar de nuevo. Terminé dividir manualmente la lista 1 correo electrónico en varios sub-lista que era lo suficientemente corto como para que el guión no tiene tiempo de espera. ¿Cómo puedo evitar ya sea el tiempo de espera, o perder de vista donde el guión es de hasta sabia dirección de modo que se puede reiniciar manualmente un correo electrónico y ninguna persona es enviada mensajes de correo electrónico más de una vez?

¿Qué otros problemas están ahí para tener en cuenta, tales como evitar las listas negras, etc.?

¿Fue útil?

Solución

Es necesario leer acerca de la función y tal vez set_time_limit ini_set ( 'memory_limit', xxMB ') para la memoria;

Puede ejecutar un script PHP CLI de su proceso de banda, que se bifurca ( pcntl_fork), que mata a los padres (que termina el proceso cli padre). El hilo servidor web que ejecuta el script a continuación, puede continuar con otro código o salida.

Ahora el proceso cli niño (A) se puede bifurcar (y convertirse en el padre) y controlar un niño (B), que envía los mensajes de correo electrónico. Si el niño muere B, el proceso padre ahora A puede desembolsar de nuevo y el nuevo niño continúa donde el anterior dejó.

Hay que mantener un registro de quién le envió de correo electrónico en un archivo de la memoria / db / o compartida a través de sockets pareadas ( socket_create_pair ) con el proceso principal.

Espero que consigue la idea.

Otros consejos

PHP no es la herramienta adecuada para el trabajo aquí -. Querrás algo que funciona independiente de un servidor web (aunque potencialmente provocada por él) o que sin duda va a tener tiempos de espera

Por ejemplo, usted podría tener PHP () a otro script (Perl? Python? ), que lee la información del trabajo a partir de una base de datos entonces se bifurca en el fondo para hacer su trabajo.

dicho no scripts Cron - es lo que no tiene acceso a Cron en su servidor? O es su preocupación por no querer configurar manualmente el trabajo Cron cada vez que un trabajo correo tiene que ser enviado?

Es posible que desee ver en http://pear.php.net/package/Mail_Queue - es algo que he estado usando recientemente. Usted puede tener su secuencia de comandos de usuario llamado volcar todos los mensajes de correo electrónico a la vez en la cola de correo. Esto es mucho más rápido que tener que enviar los correos electrónicos sobre la marcha, ya que no tendrá que lidiar con la comunicación entre los servidores, sino sólo su base de datos.

A continuación tiene un script cron que, cada pocos minutos, llama al comando Mail_Queue :: sendMailsInQueue con un límite en el número de mensajes de correo electrónico se envía por llamada Cron. Usted no tendrá que meterse con la secuencia de comandos Cron si ese es su problema - si la cola está vacía, sólo va a salir. Su correo electrónico será entonces gotear fuera del servidor a un ritmo razonable por llamada. Esto evitará que los tiempos de espera debido a la limitación de correos electrónicos por llamada cron. También ayudará a evitar problemas con otros servidores de correo, que podrían no ser feliz de ser golpeado repentinamente por una gran cantidad de mensajes de correo electrónico de usted a la vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top