PHP: Kjør skriptet å laste bildet innebygd i e-post

Denne tips er nyttig for alle som ønsker å vite om e-posten du sendte er lest. I dette tilfellet, Sette inn et bilde i brødteksten i e-postmeldingen, Når åpnes, vil utløse et skript på ekstern server.

Presentasjon

Denne teknikken er mye brukt i e-postmarkedsføring, slik at avsenderen sender hundrevis eller tusenvis av e-post til direkte post mottakerne for å nå en målgruppe, og du vet tilbakemelding (avkastning) kampanjen, IE, Hvis mottakeren har lest eller ikke propaganda innebygd i e-post.

Slik fungerer det?
Resonnementet er enkelt, du sette bare i brødteksten i e-post (innhold) en HTML-bilde Tag, med SRC-attributtet peke, ikke direkte til et bilde som normalt gjøres, men for et egendefinert skript vert på en ekstern server, der kan du utføre noen rutine og, så ja, gjøre et bilde (eller ikke). Komplisert? At ingenting, se eksempel:

1
2
3
<?PHP
  <img src="http://seuservidor.com/script.php?email=Pessoa@gmail.com&mottakeren = Taylor + Lee" />
?>

For servering?
Merk at når brukeren åpner e-postmeldingen, vil automatisk bli belastet påståtte bildet, som er egentlig en skriften. Dette er nyttig å email statistikken som har blitt sett, herunder fastsettelse som åpnet (mottakeren) og når (dato/klokkeslett). selvfølgelig, Det er ingen “spådom”, Vi vet hvem som åpnet e-postmeldingen, fordi vi har data i URL-adressen for bildet når du laster det.

Ulemper
For denne å arbeide, mottakeren må nødvendigvis være konfigurert slik at din e-post leses i HTML-format, Selv om dette er allerede en standard akseptert av fleste brukere. I verste fall, e-postleverandøren, vises en melding som blokkerte bilder, men spør om brukeren vil vise, Hva er også aksepterte, Få folk se ondskap i denne praksisen. I tilfelle av Google, en melding vises i form av en kobling, som dette:

1
2
3
...
  Bilder vises ikke - Bilder nedenfor - Vis alltid bilder av support@e-post.Microsoft.med
...

Jeg vil kommentere to måter å gjøre dette; begge fungerer også, andre er mer diskret ikke å vise data i URL, Selv om krever mer lagring ressurs. kom igjen!

Løsning 1

I praksis
Du trenger bare to PHP koder:
(1) en skal sende i HTML-format med innebygd IMG-koden
(2) og en annen for å fange opp informasjon samtidig e åpnes

TRINN 1 – Send e-post

sendmail.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?PHP
  // *** E-post (som sender e-post)
  $remetente_nome     = "Anonym";
  $remetente_email    = 'anonimo@email.com';
 
  // *** Målet (email å hvem som sender) 
  $destinatario_nome  = 'Mario Bross';
  $destinatario_email = 'mariobross@email.com';
 
  // *** Emnelinjen og meldingsteksten
  $emne      = Testing skriptkjøring ved innlasting av bilde.;
  $melding     = '
    <html lang="pt-br">
      <hodet>
        <meta charset="iso-8859-1" />    
        <tittel>'.$emne.'</tittel>
      </hodet>
      <kroppen>
        <img src="http://seuservidor.com/script.php?e = '.UrlEncode($destinatario_email).'&mottakeren = '.UrlEncode($destinatario_nome).'&Subject = ".UrlEncode($emne).'" />
      </kroppen>
    </HTML>';
 
  // Overskriften sier at innholdet er av typen HTML (å kunne lese IMG-koden og kjøre skriptet)
  $topptekst       = "MIME-Version: 1.0\n"; 
  $topptekst      .= "Content-type: tekst/html; charset = iso-8859-1\n"; 
  $topptekst      .= "From: ".(Tom($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Sender e-post
  $e-post = Tom($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  e-post($e-post, $emne, $melding, $topptekst);
?>

TRINN 2 – Fange informasjon

Vel, du la merke når du leser IMG-koden vil bli gjort et kall til filen “script.php”, høyre? Så nå må vi lage for å få informasjon og lagre den, helst i en database.

Lage tabell
Siden vi må vedvare dataene på mottakeren som åpnet e-postmeldingen, Vi kan lage en tabell som denne nedenfor. Se-feltet 'datahora_visualizado', som refererer til siste dato og klokkeslett at brukeren sett e-posten og feltet 'teller', som registrerer antall ganger som e-post ble sett.

maladireta.SQL
1
2
3
4
5
6
7
8
9
CREATE TABLE 'maladireta' (
  'id' INT ikke NULL AUTO_INCREMENT PRIMÆRE NØKKEL ,
  'e' VARCHAR( 100 ),
  'mottaker' VARCHAR( 100 ),
  'emne' VARCHAR( 200 ),
  'datahora_envio' DATETIME ikke NULL,
  'datahora_visualizado' DATETIME,
  'teller' INT STANDARD 0
) SØKEMOTOR = MYISAM ;

Å fange informasjon og vise et bilde
Etterbehandling, La oss få data som mottakerens e-post, Mottakerens navn, emnet for meldingen og dato/klokkeslett som åpnet e-posten, Lagre alt i databasen som vi laget, Hvis i fremtiden har vi å gjøre en statistikk. På slutten av skriptet, La oss egentlig lage og vise et bilde, å ikke være en IMG-koden med eksistensiell krise :), Men hvis du ikke vil vise noe, opprette minst ett tomt bilde (1×1 piksel) ikke å bli merket brutt.

script.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?PHP
  // Initialiserer og behandler inndataparameterne
  $destinatario_email = trimme(strip_tags(addslashes($_ ANMODNING['e'])));
  $destinatario_nome  = trimme(strip_tags(addslashes($_ ANMODNING['mottaker'])));
  $emne            = trimme(strip_tags(addslashes($_ ANMODNING['emne'])));       
 
  // Kobler til databasen (JUSTERE TILKOBLINGEN)
  $kobling = mysql_connect('mysql.seuservidor.com', "root", "*** *** mittpassord") eller dør('Kan ikke koble til databasen.'); 
  mysql_select_db('seubancodedados') eller dør('Kunne ikke velge database');
 
  // Montere SQL- og setter inn i databasen, Hvis e-post ikke finnes, eller oppdateringer counter hvis det
  $SQL = 'SELECT email FROM maladireta WHERE email="'.$destinatario_email.'"';
  $RES = mysql_query($SQL);
  Hvis (mysql_num_rows($RES) > 0) {
    $SQL = 'UPDATE maladireta SET datahora_visualizado="'.dato(' Y-m-d H:(I):s ').'", contador=contador+1 WHERE email="'.$destinatario_email.'"';    
  }
  annet {
    $SQL = ' INSERT INTO maladireta verdier (null, "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$emne.'", "'.dato(' Y-m-d H:(I):s ').'", null, 0)';
  }
  mysql_query($SQL);
 
  // Oppretter og viser innebygde bildet til e-post
  topptekst("Content-type: bilde/png");
  $IMG = imagecreatefrompng("imagem.png");
  imagepng($IMG);
  imagedestroy($IMG);
?>

Merk: Ikke glem å sette sammen skriptet et bilde, i tilfelle, Jeg ringte “imagem.png”. Dette bildet vises i brødteksten i e-posten i mottaker, og det er hvor markedsføring folk sette reklame, men det kan være en logo eller hva du ønsker. Skriptet har blitt testet og fungerer!

Løsning 2

En annen mulighet
Som foreslått av Mr Leandro, en mer diskret alternativet og “trygg” Det ville være, i stedet for stempling inn nettadressen til bildet mye data som e-post, emne, etc, opprette en NØKKELTABELL for øyeblikket sender email koble til dataene, og sende i URL bare HASH. Når mottakeren åpner e-postmeldingen og laste bildet, vil reise bare NUMMERVERDIEN som deretter vil bli fanget av skriptet vårt og bundet til data som vi ønsker å vite.

Opprette koblingen hash-tabellen og data
Vi vil lage tabellen fylles hver gang vi sende en e-post. Merk feltet 'hash', som vil tjene som en kobling i e-posten ble sendt og mottaker dataene som er lagret i den.

maladireta.SQL
1
2
3
4
5
6
7
8
9
10
CREATE TABLE 'maladireta' (
  'id' INT ikke NULL AUTO_INCREMENT PRIMÆRE NØKKEL ,
  `hash' VARCHAR( 50 ) IKKE NULL,
  'e' VARCHAR( 100 ),
  'mottaker' VARCHAR( 100 ),
  'emne' VARCHAR( 200 ),
  'datahora_envio' DATETIME ikke NULL,
  'datahora_visualizado' DATETIME,
  'teller' INT STANDARD 0
) SØKEMOTOR = MYISAM

Sende e-post

sendmail.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?PHP
  // *** E-post (som sender e-post)
  $remetente_nome     = "Anonym";
  $remetente_email    = 'anonimo@email.com';
 
  // *** Målet (email å hvem som sender) 
  $destinatario_nome  = 'Mario Bross';
  $destinatario_email = 'mariobross@email.com';
 
  // *** Andre data å vedvare og hashing (håndtere)
  $hash               = MD5(RAND());
  $emne            = Testing skriptkjøring ved innlasting av bilde.;
  $datahora_envio     = dato(' Y-m-d H:(I):s ');
 
  // Kobler til databasen
  $kobling = mysql_connect('mysql.seuservidor.com', "root", "*** *** mittpassord") eller dør('Kan ikke koble til databasen.'); 
  mysql_select_db('seubancodedados') eller dør('Kunne ikke velge database');  
 
  // Montere SQL- og setter inn i databasen
  $SQL = ' INSERT INTO maladireta verdier (null, "'.$hash.'", "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$emne.'", "'.$datahora_envio.'", null, 0)';
  mysql_query($SQL);
 
  // *** Melding som skal sendes
  $melding     = '
    <html lang="pt-br">
      <hodet>
        <meta charset="iso-8859-1" />    
        <tittel>'.$emne.'</tittel>
      </hodet>
      <kroppen>
        <img src="http://seuservidor.com/script.php?hash = '.$hash.'" />
      </kroppen>
    </HTML>';
 
  // Overskriften sier at innholdet er av typen HTML (å kunne lese IMG-koden og kjøre skriptet)
  $topptekst       = "MIME-Version: 1.0\n"; 
  $topptekst      .= "Content-type: tekst/html; charset = iso-8859-1\n"; 
  $topptekst      .= "From: ".(Tom($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Sender e-post
  $e-post = Tom($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  e-post($e-post, $emne, $melding, $topptekst);
?>

Merk at, i dette tilfellet, URL-adressen (SRC) bildet er bare med HASH.

Regnskap for e-post som vises

script.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?PHP
  // Fange email HASH vises
  $hash = trimme(strip_tags(addslashes($_ ANMODNING['hash'])));
 
  // Kobler til databasen
  $kobling = mysql_connect('mysql.seuservidor.com', "root", "*** *** mittpassord") eller dør('Kan ikke koble til databasen.'); 
  mysql_select_db('seubancodedados') eller dør('Kunne ikke velge database');
 
  // Montere SQL og vise dato e-postoppdateringer og telleren i databasen
  $SQL = 'SELECT hash FROM maladireta WHERE hash="'.$hash.'"';
  $RES = mysql_query($SQL);
  Hvis (mysql_num_rows($RES) > 0) {
    $SQL = 'UPDATE maladireta SET datahora_visualizado="'.dato(' Y-m-d H:(I):s ').'", contador=contador+1 WHERE hash="'.$hash.'"';
    mysql_query($SQL);
  }
 
  // Oppretter og viser innebygde bildet til e-post
  topptekst("Content-type: bilde/png");
  $IMG = imagecreatefrompng("imagem.png");
  imagepng($IMG);
  imagedestroy($IMG);
?>

Oh, Hvis du vil kontrollere eposter ble sett fra en dato, kunne lage et script med en SQL som, i tilfelle, Søk alle nyere poster av e-post fra 27 Januar 2013. Tipset…

1
2
3
4
5
6
7
8
 
  VELG * 
  Fra 'maladireta' hvor counter > 0 Og 
      DATO(datahora_visualizado) >= DATO("2013-01-27")
;
Totalt antall treff: 34925

8 kommentarer på “PHP: Kjør skriptet å laste bildet innebygd i e-post

  1. Leandro Chaves sa:

    Taylor,
    Det er ikke lurt å sette brukerens e-post på koblingen av bildet. Ideelt er å sette inn dataene i banken på tidspunktet for forsendelsen og sette en hash eller IDen til tabellen på linken, å identifisere hvem som åpnet e-postmeldingen.

    • Hei Leandro, Takk for kommentar. Det er diskutabelt. Tenker på informasjonen du har grunn, men i praksis det ville være greit preciousness, fordi e-post link (bilde) at du vurderer viktig å beskytte er tilgjengelig bare i innboksen til mottakeren. Er det samme som skjuler noe for meg som jeg vet! i tillegg, du må holde på benken din en annen tabell med tusenvis av poster fra direkte post, selv uten å vite om er e-post finnes det gyldige. Så hvis du ønsket å “enchugar” banken, kunne ikke, som for referanseintegritet mellom tabeller, må opprettholde poster, under aldri vite hvem som åpnet e-postmeldingen. Men siden vi snakker om sikkerhet, å unngå at e-post blokkert av en Wireshark liv, Hva kan gjøres er å bruke SSL (HTTPS) både i å sende e-post, som bildekoblingen. Men jeg liker forslaget, Jeg skal legge en løsning så, takk!

  2. OLA ,
    Jeg prøver å få IP av personen som lese meldingen , Men hvis en hotmail-konto for eksempel han griper en IP domene utvalg i USA. Det hjelper ikke meg mye . Hvordan får jeg den virkelige IP av maskinen det ?

  3. Régis sa:

    Fremmed fungerer noen ganger og noen ganger fungerer ikke med Chrome, Opera og brann Fox i gmail og hotmail – tømme bufferen og informasjonskapslene, men tiden gjør innspillingen i BD hvis e-posten ble åpnet eller ikke !!

  4. Diego sa:

    Fyrene... Jeg har et manus å registrere navn e-post…CPF…RG…ønsket etter brukeren registrere alt og send til databasen …Tilbake til sin automatisk e-post. type
    EKSEMPEL:”Informasjonen registrert vellykket.” Vent vår kontakt

    Ville??

    • Oops, som sagt i innlegget: “For denne å arbeide, mottakeren må nødvendigvis være konfigurert slik at din e-post leses i HTML-format”. Standard HTML som gjengis, Men selv Gmail endre rendering for tekst, Derfor fungerer ikke, fordi han vil bare vise HTML-kodene som tekst i stedet for å gjengi dem.

legg igjen et svar

Den e-postadressen din vil ikke bli publisert. Obligatoriske felt er merket med *