PHP: controlla chi ha letto l'email inviata?

Sto inviando e-mail ad alcuni utenti e voglio sapere chi l'ha letto, significa che se qualcuno ha letto quell'e-mail allora un file di log conserverà che contiene l'indirizzo e-mail di quell'utente con data / ora / IP. Per questo invio una function javascript con l'e-mail (model html) che avvisa l'indirizzo e-mail dell'utente each volta che un utente apre quell'e-mail come:

for($n=0; $n<sizeof($checkBox); $n++){ $mail = new PHPMailer(); $mail->IsHTML(true); $mail->Subject = $subject; $function = "<script language='javascript'>function stats(emailId){alert(emailId);}</script>"; $bodyOpen = "<body onload='stats(".$checkBox[$n].");'>"; $msg_body .= $body .= "<table><tr><td>Hello Everyone</td></tr></table></body>"; $mail->Body = $function.$bodyOpen.$msg_body; $mail->WordWrap = 50; $mail->FromName = 'Muhammad Sajid'; $mail->IsMAIL(); $mail->From = '[email protected]'; $mail->AddAddress($checkBox[$n]); $sent = $mail->Send(); } 

il model html funziona correttamente e mostra un popup di avviso sul caricamento della pagina, ma non funziona se uso questo model html.

E voglio solo risolvere questo problema usando PHP5.xx / javascript, nessun altro software o strumento di terze parti. Qualsiasi aiuto..?

Aggiungi intestazione a email:

 Disposition-Notification-To: [email protected] 

Come accennato in precedenza non è affidabile ed è meglio fare qualcosa del genere:

 <img src="http://yourdomain.com/emailreceipt.php?receipt=<email of receiver>" /> 

E accedetelo in un database, anche se di nuovo questo è limitato dalla capacità del client di posta elettronica di mostrare le immagini e, a volte, potrebbe persino mettere la posta nella posta indesiderata perché non rileva un'image … una soluzione che sarebbe quella di emettere effettivamente un image (pronuncia il tuo logo) alla fine di quella sceneggiatura.

Modifica: una rapida ricerca nella class phpmailer mi ha dato quanto segue:

 $mail->ConfirmReadingTo = '[email protected]'; 

ma è lo stesso del metodo Disposizione-Notifica-A sopra.

Invia un'image di beacon nelle e-mail in questo modo

 <img src='http://www.yourserver.com/beacon.php?email_id=$email_id&email_address=$user_address' style='width:1px;height:1px'> 

E quindi utilizzare il file beacon.php per registrare i dati. Dovrai quindi produrre un'image 1X1 con intestazioni appropriate.

Nota importnte
Molti client di posta elettronica popolari (come Gmail) ora bloccano le immagini esterne, quindi questo è di gran lunga, non infallibile.

Questo è quasi imansible al 100% in modo efficace.

  1. È ansible controllare where è archiviato il contenuto, ad esempio http://www.example.com/34hg038g85gb8no84g5 e fornire un collegamento nell'e-mail a tale contenuto, è quindi ansible rilevare quando tale URL è stato visualizzato.

  2. Utilizza un metodo utilizzato da MailChimp e altre campagne di newsletter, inserisci un'image invisibile nella tua email, questa image deve risiedere su un server che controlli, puoi quindi rilevare quando quell'image viene colpita quando l'utente apre l'email.

Non è ansible per definizione.

I mailreader non sono browser, non supportno javascript. Non supportno nemless i CSS corretti, quindi non aspettarti troppo. Quindi, onestamente, non vedo alcun modo per fare ciò che stai cercando di fare

Ho solo aggiunto una singola row:

 $dt = date('F \ jS\,\ Y h:i:s a'); for($n=0; $n<sizeof($checkBox); $n++){ $mail = new PHPMailer(); $mail->IsHTML(true); $mail->Subject = $subject; $src = "<img src='msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />"; $msg_body .= $src .= "<table><tr><td>Hello Everyone</td></tr></table>"; $mail->Body = $function.$bodyOpen.$msg_body; $mail->WordWrap = 50; $mail->FromName = 'Muhammad Sajid'; $mail->IsMAIL(); $mail->From = '[email protected]'; $mail->AddAddress($checkBox[$n]); $sent = $mail->Send(); } 

e nel file readmail.php è sufficiente inserire data / ora e userid con un segno di spunta (se non esiste con data / ora allegata) e risolto solo per Gmail, hotmail ma non per Yahoo … Qualcuno può aiutare a correggere anche per Yahoo ….?

Haaaa. errore stupido basta usare l'url completo come:

 $src = "<img src='http://www.msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />"; 

e functionrà anche per Yahoo ….

So che questo è un vecchio thread ma wherevo solo rispondere … per quelli di noi che devono considerare questo, suggerisco di metterci al posto delle persone che devono scrivere il software anti-spam per contrastare i nostri sforzi. Rilevare un? o un file .php (o altra estensione di script / binario) all'interno di un tag image sarebbe per me banale come un programmatore di "spam assassino" … così come l'identificazione di un'image 1×1 sarebbe …

Ho trascorso 2,5 anni come direttore digitale nazionale per una campagna presidenziale che ha raccolto $ 20 milioni prima ancora che avessimo un candidato – ecco cosa ho sviluppato per quella campagna:

  1. Al momento dell'invio (o prima), generare un hash sul TO: indirizzo e-mail e memorizzarlo nel db accanto all'indirizzo e-mail.

  2. Usa l'hash che abbiamo appena generato per modificare un logo piccolo ma chiaramente visibile nell'e-mail e fai una copia del logo con l'hash nel nome del file del logo es: emxlogox.0FAE7E6.png – fai riferimento a quell'unica image nell'e-mail per il logo: crea una copia del logo con il nome hash nel nome del file. Questa particolare serie di logo appare solo in email di massa mirate. Avvisa i membri dell'equipaggio di non copiarlo per altri scopi (o di rinominarlo estensivamente se lo fanno). La prima parte del nome del file deve essere qualcosa che non apparirà nei log in altri contesti per velocizzare l'analisi e il codice che devi creare per risolvere i falsi accessi.

  3. Analizzare i log per le occorrenze del logo richiesto ed estrarre l'hash dal nome del file per abbinarlo all'unico indirizzo email. E il tuo programma di analisi può anche get l'indirizzo IP e il tempo di ritardo necessario per get e aprire l'e-mail in modo da poter identificare i destinatari altamente reattivi e quelli che hanno impiegato una settimana per aprire l'e-mail. Esegui una ricerca geografica sull'IP e verifica se hai una corrispondenza con la posizione che hai già e / o inizia a registrare i loro templates di viaggio (o templates di utilizzo del proxy). I geo delta potrebbero anche identificare le e-mail in avanti.

Lo stesso hash, ovviamente, viene utilizzato per registrare i clic e anche il primo e il secondo opt-in. (Ora hai un "dossier" di opt-in multipli per le risposte a tali segnalazioni di abuso e stai proteggendo anche la tua reputazione di email).

Questo metodo può anche essere utilizzato per identificare chi inoltra le e-mail ai propri amici e chiedi ai "buoni spedizionieri" di unirsi a qualche tipo di élite di volontari digitali, offrire loro sconti o premi o qualsiasi cosa sia appropriata per la tua attività / progetto … in Essenzialmente, quello stesso hash diventa anche un codice di referrer.

Puoi anche chiedere loro di fare clic con il tasto destro sul logo nell'e-mail e salvarlo senza modificare il nome del file, quindi pubblicarlo su "dovunque" (l'image dovrebbe avere uno shortlink memorabile, leggibile e significativo su di esso, non un bit.ly illeggibile. shortlink). Puoi quindi utilizzare l'API di ricerca di Google per identificare chi ti ha aiutato in quel modo e ringraziarli o dare loro premi … A tal fine, è utile se la prima parte del nome del tuo logo è davvero unica come unsportingly.unique.emxlogox .0FAE7E6.png in modo da non wherer eseguire milioni di query dell'API di ricerca di Google, è sufficiente eseguire una ricerca sulla prima parte univoca del nome file e osservare gli hash dopo aver ottenuto i risultati.

Memorizzi i collegamenti in cui la loro copia del logo è comparsa nel tuo db per aggiungere al tuo dossier di where sulla networking sono attivi e ti hanno aiutato.

Sì, è lento e oneroso, ma in questi giorni in cui diciamo di voler sviluppare una "relazione" con la nostra mailing list, è quello che devi fare per dare un trattamento individuale; identifica e ricompensa i tuoi amici. E sì, si finisce con milioni di quelle immagini di nomi di file hash in una directory, ma lo spazio di archiviazione è economico e vale la pena avere davvero quel rapporto con i tuoi fa capolino.

Non puoi aggiungere javascript alle tue email.
L'unica soluzione sarebbe quella di avere solo un link nell'e-mail e il messaggio sul server, quindi si sarebbe in grado di sapere che il messaggio stesso è stato visualizzato.

Incorporare un'image specifica dell'utente (1px vuoto potrebbe essere buono) nell'e-mail e registrare se è caldo o less è una soluzione equa. Ma il problema come client di Gmail blocca le immagini esterne per impostazione predefinita.

Si prega di fare riferimento a RFC-3798 per ulteriori dettagli su MDN.

Dato che l'ultimo post è stato un po 'indietro, sono incerto se questo metodo funziona ancora.

Ho provato questo metodo su un server con PHP 5.4.30, e non sembra che abbia prodotto un'image.

Questo è un codice molto semplice:

 <img src="http://theservername.com/myaccount_email_read_offline.php"> 

Si noti che ho rimosso la querystring e qualsiasi codice aggiuntivo da questa image.

Aprendo questa pagina separata, myaccount_email_read_offline.php ha mostrato l'image.

Tuttavia, provare a includere l'image includendo un file PHP al suo posto non ha funzionato.

Mentre non ho scoperto esattamente perché il semplice file PHP non stava generando l'image inclusa (come menzionato nel mio post 6 ore fa), ecco un altro modo molto complicato di generare un file image che non è stato rifiutato dal mio PHP 5.4.30 web server.

Ecco il codice che ho inserito in un file index.php all'interno di / email_image / subdirectory:

 <?php $message_id = $_REQUEST['message_id']; $graphic_http = 'http://mywebsite.com/email_image/message_open_tracking.gif'; $filesize = filesize( 'message_open_tracking.gif' ); header( 'Pragma: public' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header( 'Cache-Control: private',false ); header( 'Content-Disposition: attachment; filename="a_unique_image_name_' . $message_id . '.gif"' ); header( 'Content-Transfer-Encoding: binary' ); header( 'Content-Length: '.$filesize ); readfile( $graphic_http ); exit; ?> 

Per il nome file image, ho usato il seguente:

 http://mywebsite.com/email_image/?message_id=12345 

All'interno della cartella email_image c'è anche un'image gif 1×1 vuota denominata "message_open_tracking.gif".

Il file index.php può anche essere rivisto per fare uso di message_id al fine di contrassegnare quel messaggio come se fosse stato letto. Se altre variables sono incluse in querystring, come l'indirizzo di posta elettronica del destinatario, tali valori possono anche essere utilizzati all'interno del file index.php.

Mille grazie a Bennett Stone per il seguente articolo: http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/