2011-08-12 12 views
6

He leído muchas preguntas y respuestas sobre este tema en StackOverflow, pero ninguna de las que he leído ha respondido mi pregunta específicamente.Enviando correo a un gran número de personas

No quiero tener una lista de correo. Las personas marcan una casilla si desean recibir el correo electrónico masivo. No hay correos electrónicos incorrectos porque las cuentas se activan mediante correos electrónicos. Entonces no hay control de rebote. Sin embargo, ya uso PHPMailer (así que no hay problemas con los encabezados y demás) y agrego todas las direcciones al campo 'a' del correo electrónico. Esto significa que todos pueden ver todos los correos electrónicos (leyendo la fuente del correo electrónico o presionando "responder a todos" en su cliente de correo electrónico), lo cual no será deseable por otros usuarios. La pregunta es:

1) ¿debo enviar cada correo electrónico individualmente, o poner todas las direcciones en el campo 'bcc'? 2) ¿No hará esto que algunos servidores de correo marquen el correo como "spam", sin importar qué tan bien estructurado esté? Si es así, ¿hay alguna manera de prevenir esto (además de agregar la dirección a algunas listas blancas o configurar claves de dominio o trabajos cron de Unix)?

Gracias!

Todo lo mencionado aquí requiere que el usuario se "suscriba" mediante un formulario y luego confirme su dirección de correo electrónico (como en PHPList). Sin embargo, ya solicité la confirmación cuando las personas se registran, por lo que no tiene sentido preguntarlas una y otra vez. Mi código existente verifica la base de datos; si su bit "recibir-película-correo" se establece en 1 (estos se recopilan mediante una consulta sql), se les envía un correo electrónico cuando se agrega una nueva película a la base de datos. Entonces, si sigues creyendo que se trata de una lista de correo (que creo que es cierta, pero tal vez mi definición desafíe las funciones de software existentes), me gustaría que tuviera, 1) alguna forma de suscribir usuarios a la lista con Código PHP (por ejemplo, si la casilla de verificación "Quiero recibir un correo electrónico cada vez que se carga una película en la base de datos" está marcada, en mi código de procesamiento de formularios los suscribiré), y 2) una forma de enviar correos electrónicos a las personas con PHP (Es decir, una función como send_mail_to_list ($ content) que envía el correo electrónico a las personas que he suscrito, cuando se envía el formulario "Agregar película". ¿Existe un software de administración de listas de correo?

+1

Lo siento, pero esto se parece muchísimo a una lista de correo para mí. – John

+0

Algunos filtros de correo no deseado aumentan el puntaje de correo electrónico no deseado que no contiene la dirección del destinatario en el campo Para (que es el caso cuando BCC: ellos). No hay mucho que pueda hacer al respecto, aparte de no usar BCC. –

+0

hay muchos servicios que te ayudarán aquí ... ¿grupos de google? mailchimp? ¿Silverpop? a menos que seas un spammer. –

Respuesta

3

Usted debe bucle sobre la lista de mensajes de correo electrónico y enviar un correo electrónico individual para cada dirección:

$mail = new PHPMailer(); 
$mail->IsSMTP();   // set mailer to use SMTP 
$mail->Host = "mail.{domain_name}.com"; // specify main and backup server 
$mail->SMTPAuth = true;   // turn on SMTP authentication 
$mail->Username = "{username}"; // SMTP username 
$mail->Password = "{password}";  // SMTP password 

$emailFrom = '{email_address}'; 

$mail->From = $emailFrom; 
$mail->IsHTML(true); // set email format to HTML if needed 

$emailSubject = '{your subject}'; 
$emailBody = "Whatever content you are sending."; 

$mail->Subject = $emailSubject; 
$mail->Body = $emailBody; 

foreach($emails => $email) { 

    $emailTo = $email['email']; 
    $emailToName = $email['name']; 

// send an email to customer 
    $mail->AddAddress($emailTo, $emailToName); 

    if(!$mail->Send()) 
    { 
     echo 'failed'; 
    } 

    $mail->ClearAddresses(); 
} 
1

1) ¿debo enviar cada correo electrónico individualmente o poner todas las direcciones en el campo 'bcc'?

Definitivamente individualmente. Bcc tendrá su correo electrónico visto como correo no deseado.

2) ¿Esto no hará que algunos servidores de correo marquen el correo como "spam", no ¿qué tan bien estructurado está? Si es así, ¿hay alguna forma de evitar prevenir esto (además de agregar la dirección a algunas listas blancas o configurar claves de dominio o trabajos cron de Unix)?

utilizando un registro SPF podría ayudar. Asegúrese de que el DNS inverso a su servidor no esté en la lista negra, especialmente si se trata de un alojamiento compartido.

0

No he hecho esto en php ya que sé que de manera predeterminada no hay hyper threading en php.

En otros idiomas/frameworks como Ruby o .NET, enviaría correos electrónicos individuales juntos por hyper/multi threading. Esto es similar al enfoque * nix cron jobs que conoce, excepto que se ejecuta en tiempo de ejecución: crea, por ejemplo, un hilo por cada 5 direcciones que está enviando y luego todos los hilos envían 5 correos uno tras otro.

Tenga en cuenta que incluso con este enfoque, el cuello de botella cambia de la aplicación al servidor de correo electrónico que está utilizando.Así que digamos que estás usando el postgrejo incorporado que viene con apache, no manejará grandes volúmenes ya que cada subproceso le agregará carga.

Y, por supuesto, debe evitar todo esto si puede usar MailChimp !!

0

enviar a cada usuario un correo electrónico por separado, dirigida sólo a ellos.

Configure DKIM y SPF, o al menos cree registros SPF apropiados. DKIM requiere alguna configuración del servidor de correo que en realidad está enviando el correo por usted, pero puede ayudar mucho con la entregabilidad, especialmente a los grandes proveedores de correo electrónico.

0

Mi consejo al lado de otros sería: mantener una cola de correos electrónicos donde se puede limitar la tasa de entrega. A algunos proveedores de correo electrónico no les gusta cuando intentas enviar miles de correos electrónicos a su dominio a la vez.

Esto debería ser posible con algunos MTA .. Pero no he visto uno que sea lo suficientemente flexible para hacer esto. Lo que utilicé para esto fue Pear class Mail_Queue + cron job.

Cuestiones relacionadas