Domanda

Al momento sto scrivendo un blog di musica. L'amministratore inserisce un nuovo articolo ogni 2-3 giorni. Una volta che i posti di amministratore un articolo, una e-mail di massa sarà inviato a circa 5000 abbonati immediatamente.

Qual è il modo migliore per attuare la funzione mail di massa?

Fa il seguente lavoro di funzione?

function massmail() 
{
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);
  }
}

Un'altra domanda: se tutti i 5000 abbonati utilizzano Yahoo Mail, Yahoo sarà trattarlo come un attacco DDoS e bloccare l'indirizzo IP del server SMTP

?
È stato utile?

Soluzione

Innanzitutto, utilizzando la funzione mail () fornito con PHP non è una soluzione ottimale. E 'facilmente contrassegnato come spam, ed è necessario configurare intestazione per garantire che si sta inviando in modo corretto e-mail HTML. Per quanto riguarda se il frammento di codice funzionerà, che sarebbe, ma dubito che si otterrà il codice HTML all'interno di esso correttamente senza specificando intestazioni supplementari

Ti consiglio di dare un'occhiata a SwiftMailer , che ha il supporto HTML, supporto per diversi tipi MIME e SMTP di autenticazione (che ha meno probabilità di segnare la posta come spam).

Altri suggerimenti

Vorrei inserire tutti i messaggi di posta elettronica in un database (un po 'come una coda), quindi elaborare uno alla volta come avete fatto nel codice (se si desidera utilizzare swiftmailer o phpmailer ecc, si può fare anche questo .)

Dopo ogni mail viene inviata, aggiornare il database per registrare la data / ora è stato inviato.

mettendoli nel database prima devi

  1. la registrazione di chi lo ha inviato a
  2. se i tempi di script fuori o non riesce e si deve correre di nuovo, quindi non finirà per inviare la stessa email a persone due volte
  3. è possibile eseguire il processo di invio da un lavoro cron e fare una partita alla volta, in modo che il server di posta non è sopraffatto, e tenere traccia di ciò che è stato inviato

Tenete a mente, come automatizzare e-mail o messaggi di posta elettronica non validi rimbalzare in modo che possano automaticamente rimosso dall'elenco.

Se si invia che molte e-mail che si sono tenuti a ottenere un paio di rimbalzi.

Questo è un consiglio, non è una risposta: Tu sei molto, molto meglio utilizzare un software mailing list dedicata. postino è un esempio spesso utilizzato, ma qualcosa di semplice come mlmmj può essere sufficiente. L'invio di mail di massa è in realtà un compito più difficile di quanto in realtà sembra essere. Non solo è necessario inviare le mail, si hanno anche per tenere traccia dei "morti" indirizzi per evitare la posta, o peggio, il vostro server di posta, essendo contrassegnato come spam. Bisogna gestire le persone cancellarsi per la stessa ragione.

È possibile implementare queste cose da soli, ma in particolare di rimbalzo la manipolazione è un lavoro difficile e poco gratificante. Utilizzo di un gestore di mailing list renderà le cose molto più facili.

Per quanto riguarda come rendere la vostra posta appetibile per Yahoo, che è tutta un'altra cosa. Per tutti i suoi difetti, sembrano mettere grande magazzino in SPF e DomainKey. Probabilmente sarà necessario per la loro attuazione, che richiederà una cooperazione all'amministratore del server di posta.

Si può considerare l'utilizzo di CRON per questo tipo di operazione. L'invio di mail di massa in una volta non è certamente buona, può essere rilevato come spam DDoS, mandare in crash il server ecc

Quindi CRON potrebbe essere una grande soluzione, inviare 100 mail in una sola volta, quindi attendere qualche minuto, il prossimo 100, ecc.

Non inviare e-mail a 5.000 persone che utilizzano gli strumenti standard di PHP. Sarai bandito dalla maggior parte dei fornitori di servizi Internet in pochi secondi e nemmeno lo sai. Si dovrebbe usare sia alcuni software mailing list o un Email Service Provider fare per questo.

Perché non usare invece phplist ? E 'anche costruito sulla base di PHP Mailer e un sacco di aziende leader del settore lo si utilizza. Ho usato io stesso un paio di volte per l'invio di mail di massa ai miei clienti. La cosa bella di phplist è che si può strozzare i messaggi su un livello di dominio, più un livello limite di tempo.

Quello che abbiamo fatto anche con un paio di sistemi di cattura interni che abbiamo ottenuto era di spingere la nostra base di utenti alla lista mailling e quindi avere una voce di cron innescando un dato di posta ogni giorno. Le possibilità sono infinite, questa è la cosa impressionante su open source!

Anche i pacchetti PEAR:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

singhiozzo.

PS: NON usare mail () per inviare i messaggi di posta elettronica 5000. In aggiunta a ciò che chiunque altro ha detto, è estremamente inefficiente poiché mail () crea un socket separato per ogni set-mail, anche per lo stesso MTA.

Anche dare un'occhiata alla classe PHPMailer. PHPMailer

L'ho già fatto utilizzando Lotus Notus e PHP. Questa soluzione funziona se si ha accesso al server di posta o si può richiedere qualcosa per l'amministratore mail server:

1) Creare un gruppo nella mail server: "Sales Department"
. 2) Assegnare alla group i conti è necessario essere nel gruppo.
3) Assegnare un indirizzo internet al gruppo:. Salesdept@DOMAIN.com
4) È possibile creare script PHP utilizzando la funzione di posta elettronica:
   $ A = "salesdept@DOMAIN.com";
   posta elettronica ($ a, $ subject, $ message, $ intestazioni);
Ha funzionato per me e per tutti gli account inclusi nel gruppo riceve la posta.
La migliore delle fortune.

È possibile utilizzare swiftmailer per esso. Utilizzando processo batch.

<?php
    $message = Swift_Message::newInstance()
      ->setSubject('Let\'s get together today.')
      ->setFrom(array('myfrom@domain.com' => 'From Me'))
      ->setBody('Here is the message itself')
      ->addPart('<b>Test message being sent!!</b>', 'text/html');

    $data = mysql_query('SELECT first, last, email FROM users WHERE is_active=1') or die(mysql_error());
    while($row = mysql_fetch_assoc($data))
    {
       $message->addTo($row['email'], $row['first'] . ' ' . $row['last']);
    }

    $message->batchSend();
?>

Perché preoccuparsi programmare te stesso? E 'un blog, basta usare Google Feedburner che spinge automaticamente gli aggiornamenti di abbonati via e-mail.

E ' libero e utilizza l'infrastruttura di Google . Non può andare meglio di così. Io lo uso per alcuni dei miei siti / blog e funziona meravigliosamente.

Unico inconveniente è che non sembrano essere attivamente sviluppato e non supportato più. Io suggerirei di cipiglio via a una lista di email commerciali, se si è sul serio il vostro business.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top