PHP: Mbukak script loading image ditempelake ing e-mail

tip Iki migunani kanggo wong sing kepengin ngerti yen email sing dikirim iki maca. ing kasus iki, masang gambar ing awak saka pesen email, nalika dibukak, bakal micu script ing server remot.

presentation

technique iki digunakake digunakake ing marketing email, supaya pangirim dikirim atusan utawa ewu email panampa saka mailing ngarahake kanggo entuk penonton target, lan pengin ngerti saran (bali) kampanye, ing tembung liyane, yen panampa wis maca utawa ora iklan ditempelake ing e-mail.

Cara kerjane?
pertimbangan punika prasaja, sampeyan mung sijine ing awak email (isi) siji IMAGE Tag HTML, karo ngubungake SRC pointing, ora langsung kanggo gambar minangka biasane rampung, nanging kanggo script adat tuan rumah ing server remot, ngendi sampeyan bisa nindakake sawetara tumindake lan, banjur ya, nerjemahake gambar (utawa ora). rumit? boten, ndeleng conto:

1
2
3
<?php
  <img src="http://seuservidor.com/script.php?email=pessoa@gmail.com&target = Taylor + Lopes" />
?>

apa?
Elinga yen pangguna mbukak email ing, otomatis gambar mestine bakal dimuat, kang bener script. Iki migunani kanggo statistik email sing padha visualized, kalebu nentokake WHO kabuka (panrima) lan nalika (Tanggal / Wektu). langit, iku ora “ngiro-iro”, kita ngerti sapa sing nambani email, atrelamos amarga data iki ing URL saka gambar nalika ngirim.

drawback
Iki bisa, panampa kudu wis nyiyapake kanggo email kanggo maca ing format HTML, senajan wis standar sing ditampa dening mayoritas kedhaftar. ing paling awon, panyedhiya email bakal nampilake pesen sing diblokir images, nanging takon yen pangguna kepengin kanggo nampilake, kang uga umum ditampa, wiwit sawetara wong ndeleng rasa sengit ing laku iki. Ing kasus Google, pesen katon ing wangun link, supaya:

1
2
3
...
  Images ora ditampilake - gambar tampilan ngisor - Tansah nampilno gambar suport@email.microsoft.karo
...

Aku Komentar ing rong cara kanggo nindakake iki; loro bisa merata, lan liya luwih wicaksana ora kanggo nampilake data ing URL, sanajan iku mbutuhake sumber panyimpenan. Ayo!

solusi 1

ing laku
Sampeyan kudu mung loro kode PHP:
(1) siji kanggo ngirim e-mail ing format HTML karo dibangun ing tag IMG
(2) lan liyane dijupuk informasi ing wektu email kabukak

STEP 1 – email

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
  // *** email (pangirim email)
  $remetente_nome     = 'Anonymous';
  $remetente_email    = 'Anonimo@email.com';
 
  // *** target (e-mail pangirim) 
  $destinatario_nome  = 'Mario Bross';
  $destinatario_email = 'Mariobross@email.com';
 
  // *** Subject lan pesen awak
  $tundhuk      = 'Testing eksekusi script kanggo mbukak gambar.';
  $pesen     = '
    <html lang="pt-br">
      <sirah>
        <meta charset="iso-8859-1" />    
        <title>'.$tundhuk.'</title>
      </sirah>
      <awak>
        <img src="http://seuservidor.com/script.php?email = '.urlencode($destinatario_email).'&target = '.urlencode($destinatario_nome).'&Subject = '.urlencode($tundhuk).'" />
      </awak>
    </html>';
 
  // Header nyatakake yen isi punika jinis HTML (dadi bisa kanggo maca tag IMG lan mbukak script)
  $header       = "MIME-Version: 1.0\n"; 
  $header      .= "Content-type: teks / html; charset = iso-8859-1\n"; 
  $header      .= "From: ".(P($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Kirimi e-mail
  $email = P($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  mail($email, $tundhuk, $pesen, $header);
?>

STEP 2 – Alexa njupuk

uga, ngeweruhi yen maca TAG IMG telpon bakal digawe kanggo berkas “script.php”, mesthi? Dadi saiki kita kudu nggawe informasi kasebut lan simpen, luwih becik ing database.

Nggawe TABLE
Amarga kita kudu terus data panrima sing mbukak email, kita bisa nggawe tabel kaya sing kasebut ing ngisor iki. Deleng lapangan `datahora_visualizado`, que refere-se última data e hora em que o usuário visualizou o e-mail e o campo `contador`, que irá registrar a quantidade de vezes que o e-mail foi visto.

maladireta.sql
1
2
3
4
5
6
7
8
9
CREATE TABLE  `maladireta` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `email` VARCHAR( 100 ),
  `destinatario` VARCHAR( 100 ),
  `assunto` VARCHAR( 200 ),
  `datahora_envio` DATETIME NOT NULL,
  `datahora_visualizado` DATETIME,
  `contador` INT DEFAULT 0
) ENGINE = MYISAM ;

Script kanggo dijupuk informasi lan nampilake gambar
finalizing, ayo kang njupuk data minangka e-mail address, jeneng panampa, topik pesen lan tanggal / wektu sing dibukak email, nyimpen iku ing database kita digawe, Yen kita kudu nggawe mangsa statistik. Ora script do final, Bener nggawe lan nampilake gambar, mung kanggo ora njaluk tag karo IMG krisis eksistensial :), nanging yen sampeyan pengin nuduhake apa, nggawe paling siji gambar blank (1×1 piksel) ora kanggo njaluk broken Tag.

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
  // Initializes lan Ngalahake paramèter input
  $destinatario_email = motong(strip_tags(addslashes($_REQUEST['Email'])));
  $destinatario_nome  = motong(strip_tags(addslashes($_REQUEST['Panampa'])));
  $tundhuk            = motong(strip_tags(addslashes($_REQUEST['Subject'])));       
 
  // Nyambung menyang database (Nyetel sambungan YOUR)
  $link = mysql_connect('Mysql.seuservidor.com', 'ROOT', 'MyPassword *** ***') utawa ing('Gagal nyambung database.'); 
  mysql_select_db('Seubancodedados') utawa ing('Gagal kanggo pilih database');
 
  // Monta SQL lan sisipan in database, email yen ora ana, utawa nganyari counter yen ana
  $dba = 'SELECT email FROM maladireta WHERE email="'.$destinatario_email.'"';
  $res = mysql_query($dba);
  yen (mysql_num_rows($res) > 0) {
    $dba = 'UPDATE maladireta SET datahora_visualizado="'.tanggal('Y-m-d H:i:s ').'", contador=contador+1 WHERE email="'.$destinatario_email.'"';    
  }
  liya {
    $dba = 'Masang menyang angka maladireta (null, "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$tundhuk.'", "'.tanggal('Y-m-d H:i:s ').'", null, 0)';
  }
  mysql_query($dba);
 
  // Nggawe lan nampilake gambar ditempelake dening email
  header("Content-type: image / png");
  $img = imagecreatefrompng("imagem.png");
  imagepng($img);
  imagedestroy($img);
?>

pengamatan: Aja lali kanggo sijine bebarengan script gambar, ora cilik, Aku disebut “imagem.png”. gambar iki bakal katon ing panampa email, lan endi wong marketing sijine iklan, nanging bisa dadi logo utawa apa wae pengin. Skrip dites lan karya!

solusi 2

kamungkinan liyané
Minangka disaranake dening fellow Leandro, a pilihan liyane wicaksana lan “ngamanake” ngatur, tinimbang punching ing URL saka gambar sing akèh data kayata email, tundhuk, etc, nggawe HASH ing wektu saka e-mail dikirim ngubungaké menyang data kuwi, lan ngirim URL mung HASH. Nalika panampa mbukak email lan upload gambar, bakal lalu lintas mung ngrembug banjur sing bakal dijupuk dening script kita lan disambung kanggo data kita pengin ngerti.

Nggawe meja ngrembug lan data link
Ayo dadi gawe meja sing bakal populata saben-saben kita ngirim e-mail. Cathetan utawa lapangan : hash`, kang bakal ngawula minangka lampiran e-mail sing dikirim lan panampa saka data sing padha disimpen ing meja.

maladireta.sql
1
2
3
4
5
6
7
8
9
10
CREATE TABLE  `maladireta` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  :ngrembug: VARCHAR( 50 ) ora NULL,
  `email` VARCHAR( 100 ),
  `destinatario` VARCHAR( 100 ),
  `assunto` VARCHAR( 200 ),
  `datahora_envio` DATETIME NOT NULL,
  `datahora_visualizado` DATETIME,
  `contador` INT DEFAULT 0
) ENGINE = MYISAM

Ngirim e-mail

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
  // *** email (pangirim email)
  $remetente_nome     = 'Anonymous';
  $remetente_email    = 'Anonimo@email.com';
 
  // *** target (e-mail pangirim) 
  $destinatario_nome  = 'Mario Bross';
  $destinatario_email = 'Mariobross@email.com';
 
  // *** data liyane kanggo tahan lan HASH (pengenal)
  $ngrembug               = MD5(Rand());
  $tundhuk            = 'Testing eksekusi script kanggo mbukak gambar.';
  $datahora_envio     = tanggal('Y-m-d H:i:s ');
 
  // Nyambung menyang database
  $link = mysql_connect('Mysql.seuservidor.com', 'ROOT', 'MyPassword *** ***') utawa ing('Gagal nyambung database.'); 
  mysql_select_db('Seubancodedados') utawa ing('Gagal kanggo pilih database');  
 
  // Monta SQL lan sisipan in database
  $dba = 'Masang menyang angka maladireta (null, "'.$ngrembug.'", "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$tundhuk.'", "'.$datahora_envio.'", null, 0)';
  mysql_query($dba);
 
  // *** Pesen bakal dikirim
  $pesen     = '
    <html lang="pt-br">
      <sirah>
        <meta charset="iso-8859-1" />    
        <title>'.$tundhuk.'</title>
      </sirah>
      <awak>
        <img src="http://seuservidor.com/script.php?ngrembug = '.$ngrembug.'" />
      </awak>
    </html>';
 
  // Header nyatakake yen isi punika jinis HTML (dadi bisa kanggo maca tag IMG lan mbukak script)
  $header       = "MIME-Version: 1.0\n"; 
  $header      .= "Content-type: teks / html; charset = iso-8859-1\n"; 
  $header      .= "From: ".(P($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Kirimi e-mail
  $email = P($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  mail($email, $tundhuk, $pesen, $header);
?>

Elinga yen, ing kasus iki, URL sing (sRC) gambar mung karo HASH.

Ngetang email katampil

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
  // Njupuk HASH email viewed
  $ngrembug = motong(strip_tags(addslashes($_REQUEST['Pager'])));
 
  // Nyambung menyang database
  $link = mysql_connect('Mysql.seuservidor.com', 'ROOT', 'MyPassword *** ***') utawa ing('Gagal nyambung database.'); 
  mysql_select_db('Seubancodedados') utawa ing('Gagal kanggo pilih database');
 
  // Monta SQL lan nganyari ndeleng email tanggal lan counter ing database
  $dba = 'SELECT hash FROM maladireta WHERE hash="'.$ngrembug.'"';
  $res = mysql_query($dba);
  yen (mysql_num_rows($res) > 0) {
    $dba = 'UPDATE maladireta SET datahora_visualizado="'.tanggal('Y-m-d H:i:s ').'", contador=contador+1 WHERE hash="'.$ngrembug.'"';
    mysql_query($dba);
  }
 
  // Nggawe lan nampilake gambar ditempelake dening email
  header("Content-type: image / png");
  $img = imagecreatefrompng("imagem.png");
  imagepng($img);
  imagedestroy($img);
?>

Ah, yen sampeyan pengin ndeleng email sing padha dideleng saka tanggal, Aku nggawe script karo jinis SQL kuwi sing, ora cilik, golèk kabeh cathetan anyar saka e-mail katon saka 27 Januari 2013. Iku tip a…

1
2
3
4
5
6
7
8
 
  Pilih * 
  saka
      : maladireta`
  ngendi
      contador > 0 lan 
      tanggal(datahora_visualizado) >= tanggal("2013-01-27")
;
Total accesses: 34897

8 reviews “PHP: Mbukak script loading image ditempelake ing e-mail

  1. Leandro Chaves ngandika:

    Taylor,
    Ora laku apik kanggo nyelehake pangguna ing link image email. becik iku kanggo ngetik data ing database ing wektu pangiriman lan sijine ngrembug utawa id meja ing link ing, supaya kanggo ngenali sing dibukak email.

    • oi Leandro, thanks kanggo komentar. Sing dereng tamtu. Mikir Keamanan Informasi sampeyan tengen, nanging ing laku iku bakal preciousness tengen, amarga link e-mail (gambar) sing nimbang penting kanggo nglindhungi mung bakal kasedhiya ing kothak mlebu panampa dhewe. Iku padha kanggo ndhelikake soko saka kula sing aku ngerti! Salajengipun, sampeyan bakal kudu terus ing kanggo jog Tabel liyane karo ewu cathetan saka mailing, tanpa malah ngerti yen email sing kono sing bener. Banjur yen wanted “enchugar” bank, ora bisa, minangka prakara integritas referential antarane tabel, bakal dibutuhake kanggo njaga cathetan, digunakake tau ngerti sapa sing nambani email. Nanging awit kita lagi ngomong bab keamanan, supaya gadhah e-mail intercepted dening urip Wireshark, apa bisa rampung kanggo nggunakake SSL (https) loro ngirim email, minangka link gambar. Nanging aku disenengi proposal, Aku bakal nerbitaké solusi kuwi, worth!

  2. Ola ,
    I am looking kanggo njaluk IP saka wong sing maca pesen , Nanging yen akun hotmail contone kang njupuk sawetara IP karo domain ing AS. Iku ora kula akeh . Piye carane aku njaluk IP nyata saka mesin kang ?

  3. Régis ngandika:

    Strange Kadang iku dianggo lan kadhangkala ora bisa nggunakake Chrome, Opera e Fire Fox ora gmail e hotmail – ngresiki cache lan cookie, nanging kadhangkala ora apa rekaman ing BD yen email sing wis dibukak utawa ora !!

  4. diego ngandika:

    Galera..tenho script pendaptaran karo nome..email…CPF…rg…Aku wanted sawise kabeh panganggo ndhaftar lan ngirim kanggo database sandi …ngasilake soko kanggo automatico..tipo email
    CONTO:”Alexa kasil kedhaftar ..” ngenteni kontak kita

    Aku seneng??

    • Opa, kaya aku ngandika ing Pos: “Iki bisa, panampa kudu wis nyiyapake kanggo email kanggo maca ing format HTML”. Kanthi gawan HTML wis dilakoni, nanging malah Gmail obah Rendering kanggo TEXT, ana ora bakal bisa, amarga mung bakal nampilake tags minangka teks tinimbang Pengawas wong.

Ninggalake a Reply

Panjenengan alamat email ora bisa diterbitake. Perangkat kothak ditandhani karo *