PHP: Hlaupa handrit loading image fellt í tölvupósti

Þessi ábending er gagnlegt fyrir þá sem vilja vita hvort e-mail sem þú sendir var lesið. í þessu tilfelli, að setja inn mynd í meginmál skeytis, þegar opnað, mun birta skriftuna á ytri miðlara.

kynning

Þessi tækni er mikið notuð í markaðssetningu email, þannig að sendandi sendir hundruð eða þúsundir tölvupósta til viðtakenda póstlista þinn miða að því að ná til markhóps, og furða viðbrögð (aftur) herferðin, í öðrum orðum, Ef viðtakandi hefur lesið eða ekki innbyggður-í tölvupósti auglýsingum.

Hvernig það virkar?
The reasoning er einfalt, þú setur einfaldlega í tölvupósti líkamanum (efni) An Image HTML Tag, með SRC eiginleiki benda, ekki beint að mynd eins og það er venjulega gert, en fyrir sérsniðnum handrit hýst á ytri miðlara, þar sem þú getur framkvæmt nokkrar venja og, þá já, lúka mynd (eða ekki). flókið? ekkert, sjá dæmi:

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

hvað er?
Athugaðu að þegar notandinn opnar tölvupóstinn, sjálfkrafa átti myndin verður hlaðinn, sem er í raun handrit. Þetta er gagnlegur fyrir tölfræði tölvupóstföng sem voru visualized, þar á meðal að ákvarða sem opnaði (viðtakandi) og ÞEGAR (dagsetningu / tíma). ljóst, það er engin “giska”, við vitum sem opnaði póstinn, atrelamos vegna þess að þessi gögn í vefslóð myndarinnar þegar senda það.

galli
Til að þetta virki, viðtakandinn þarf endilega að vera stillt þannig að netfangið þitt er að lesa í HTML-sniði, þó að þetta sé nú staðlað samþykkt af meirihluta notenda. í versta falli, tölvupósturinn gefur mun birta skilaboð orðatiltæki þessi læst myndir, En spyrja ef notandinn vill sýna, sem einnig er venjulega samþykkt, þar fáir sjá vonsku í þessu starfi. Í Google ræða, skilaboð birtist í formi tengilinn, svo:

1
2
3
...
  Myndir birtast ekki - Birta myndir fyrir neðan - Alltaf sýna Stuðningur myndir@Tölvupóstur.Microsoft.með
...

Ég mun tjá sig um tvær leiðir til að gera þetta; bæði vinna jafn, og annað er meira næði ekki að birta gögn í vefslóðinni, þó það krefst meiri geymsla lögun. koma á!

lausnin 1

í reynd
Þú þarft aðeins tvær PHP kóða:
(1) einn til að senda tölvupóst á HTML-sniði með innbyggðu IMG tag
(2) og annað að fanga upplýsingum á þeim tíma sem tölvupóstur er opnaður

STEP 1 – Tölvupóstur

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
  // *** netfangið þitt (Tölvupóstur sendanda)
  $remetente_nome     = 'Anonymous';
  $remetente_email    = 'Anonimo@email.com';
 
  // *** miða (E-mail til sendanda) 
  $destinatario_nome  = "Mario Bross ';
  $destinatario_email = 'Mariobross@email.com';
 
  // *** Efni og skilaboð líkama
  $efni      = "Testing handrit framkvæmd til að hlaða mynd.";
  $skilaboðin     = '
    <html lang="pt-br">
      <höfuð>
        <meta charset="iso-8859-1" />    
        <Title>'.$efni.'</Title>
      </höfuð>
      <líkami>
        <img src="http://seuservidor.com/script.php?Tölvupóstur = '.urlencode($destinatario_email).'&target = '.urlencode($destinatario_nome).'&Subject = '.urlencode($efni).'" />
      </líkami>
    </HTML>';
 
  // Haus efnis að innihald er af gerðinni HTML (til að vera fær um að lesa IMG tag og keyra handrit)
  $haus       = "MIME-Version: 1.0\n"; 
  $haus      .= "Content-type: texti / HTML; charset = iso-8859-1\n"; 
  $haus      .= "From: ".(tóm($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Senda tölvupóst
  $Tölvupóstur = tóm($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  mail($Tölvupóstur, $efni, $skilaboðin, $haus);
?>

STEP 2 – handtaka upplýsingar

vel, þú tekið eftir því að þegar ég las TAG IMG kalla verður til skrá “script.php”, sum? Então agora temos que criá-lo para pegar as informações e armazená-las, de preferência num banco de dados.

Criando TABELA
Já que precisamos persistir os dados do destinatário que abriu o e-mail, podemos criar uma tabela como esta abaixo. Veja o campo `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
) Vél = MYISAM ;

Handrit að handtaka upplýsingar og birta mynd
lýkur, við skulum taka gögn sem E-mail, Nafn viðtakanda, efni skeytisins og dagsetningu / tíma sem opnaði póstinn, geyma það í dag við bjuggum, Ef við þurfum að gera í framtíðinni tölfræðileg. Engin endanleg do handrit, Í raun búa til og birta mynd, aðeins til að fá merki með IMG tilvistarkrísu :), en ef þú vilt sýna neitt, búa til að minnsta kosti einn auðri mynd (1×1 pixla) ekki að fá brotið 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 og annast breytur inntak
  $destinatario_email = snyrta(strip_tags(addslashes($_REQUEST['Email'])));
  $destinatario_nome  = snyrta(strip_tags(addslashes($_REQUEST["Viðtakandi"])));
  $efni            = snyrta(strip_tags(addslashes($_REQUEST['Efni'])));       
 
  // Tengist gagnagrunninum (ADJUST Tengingin þín)
  $tengill = mysql_connect('Mysql.seuservidor.com', 'Rót', "LyKilOrd *** *** ') eða sem('Ekki tókst að tengjast gagnagrunninum.); 
  mysql_select_db('seubancodedados') eða sem('Falhou ao selecionar o banco de dados');
 
  // Monta a SQL e insere no banco de dados, caso email ainda não exista, ou atualiza contador se existir
  $sql = 'SELECT email FROM maladireta WHERE email="'.$destinatario_email.'"';
  $res = mysql_query($sql);
  ef (mysql_num_rows($res) > 0) {
    $sql = 'UPDATE maladireta SET datahora_visualizado="'.date('Y-m-d H:ég:s').'", contador=contador+1 WHERE email="'.$destinatario_email.'"';    
  }
  Annar {
    $sql = 'INSERT INTO maladireta VALUES (null, "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$efni.'", "'.date('Y-m-d H:ég:s').'", null, 0)';
  }
  mysql_query($sql);
 
  // Cria e exibe a imagem embutida ao email
  haus("Content-type: image/png");
  $img = imagecreatefrompng("imagem.png");
  imagepng($img);
  imagedestroy($img);
?>

athugasemd: Ekki gleyma að setja saman handrit mynd, nei málið, ég hringdi “imagem.png”. Þessi mynd birtist í líkamanum tölvupóstinum viðtakanda, og er þar markaðsmenn að setja auglýsingar, en það getur verið merki eða hvað sem þú vilt. Handritið var prófaður og virkar!

lausnin 2

annar möguleiki
Eins og leiðbeinandi við náungi Leandro, meira næði valkostur og “örugg” myndi, í stað þess að gata í vefslóð myndarinnar mikið af gögnum, svo sem tölvupósti, efni, etc, búa Tæti á þeim tíma sem að senda tölvupóst tengja það að þessum gögnum, og senda URL eina HASH. Þegar viðtakandinn opnar póstinn og senda inn mynd, umferð verður bara kjötkássa þá verður tekin af handriti okkar og tengist þeim gögnum sem við viljum vita.

Búa til kjötkássa borð og gagnahlekkur
Við munum búa til töflu sem er byggð í hvert skipti sem við senda e-mail. Athugið sviði `hash`, sem mun þjóna sem viðhengi í tölvupósti sem var sendur og viðtakandans þau gögn sem voru geymdar í töflunni.

maladireta.sql
1
2
3
4
5
6
7
8
9
10
CREATE TABLE  `maladireta` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `kjötkássa`VARCHAR( 50 ) EKKI NULL,
  `email` VARCHAR( 100 ),
  `destinatario` VARCHAR( 100 ),
  `assunto` VARCHAR( 200 ),
  `datahora_envio` DATETIME NOT NULL,
  `datahora_visualizado` DATETIME,
  `contador` INT DEFAULT 0
) Vél = MYISAM

Senda 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
  // *** netfangið þitt (Tölvupóstur sendanda)
  $remetente_nome     = 'Anonymous';
  $remetente_email    = 'Anonimo@email.com';
 
  // *** miða (E-mail til sendanda) 
  $destinatario_nome  = "Mario Bross ';
  $destinatario_email = 'Mariobross@email.com';
 
  // *** Önnur gögn til að hverfa og kjötkássa (kennimerki)
  $kjötkássa               = md5(rand());
  $efni            = "Testing handrit framkvæmd til að hlaða mynd.";
  $datahora_envio     = date('Y-m-d H:ég:s');
 
  // Tengist gagnagrunninum
  $tengill = mysql_connect('Mysql.seuservidor.com', 'Rót', "LyKilOrd *** *** ') eða sem('Ekki tókst að tengjast gagnagrunninum.); 
  mysql_select_db('seubancodedados') eða sem('Falhou ao selecionar o banco de dados');  
 
  // Monta a SQL e insere no banco de dados
  $sql = 'INSERT INTO maladireta VALUES (null, "'.$kjötkássa.'", "'.$destinatario_email.'", "'.$destinatario_nome.'", "'.$efni.'", "'.$datahora_envio.'", null, 0)';
  mysql_query($sql);
 
  // *** Skilaboð eru send
  $skilaboðin     = '
    <html lang="pt-br">
      <höfuð>
        <meta charset="iso-8859-1" />    
        <Title>'.$efni.'</Title>
      </höfuð>
      <líkami>
        <img src="http://seuservidor.com/script.php?tæti = '.$kjötkássa.'" />
      </líkami>
    </HTML>';
 
  // Haus efnis að innihald er af gerðinni HTML (til að vera fær um að lesa IMG tag og keyra handrit)
  $haus       = "MIME-Version: 1.0\n"; 
  $haus      .= "Content-type: texti / HTML; charset = iso-8859-1\n"; 
  $haus      .= "From: ".(tóm($remetente_nome) ? $remetente_email : '"'.$remetente_nome.'" <'.$remetente_email.'>')."\n";
 
  // Senda tölvupóst
  $Tölvupóstur = tóm($destinatario_nome) ? $destinatario_email : '"'.$destinatario_nome.'" <'.$destinatario_email.'>';
  mail($Tölvupóstur, $efni, $skilaboðin, $haus);
?>

Perceba que, í þessu tilfelli, a URL (SRC) da imagem fica apenas com o HASH.

Contabilizando e-mail visualizado

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
  // Captura o HASH do e-mail visualizado
  $kjötkássa = snyrta(strip_tags(addslashes($_REQUEST['hash'])));
 
  // Tengist gagnagrunninum
  $tengill = mysql_connect('Mysql.seuservidor.com', 'Rót', "LyKilOrd *** *** ') eða sem('Ekki tókst að tengjast gagnagrunninum.); 
  mysql_select_db('seubancodedados') eða sem('Falhou ao selecionar o banco de dados');
 
  // Monta a SQL e atualiza data de visualização do email e contador no banco de dados
  $sql = 'SELECT hash FROM maladireta WHERE hash="'.$kjötkássa.'"';
  $res = mysql_query($sql);
  ef (mysql_num_rows($res) > 0) {
    $sql = 'UPDATE maladireta SET datahora_visualizado="'.date('Y-m-d H:ég:s').'", contador=contador+1 WHERE hash="'.$kjötkássa.'"';
    mysql_query($sql);
  }
 
  // Cria e exibe a imagem embutida ao email
  haus("Content-type: image/png");
  $img = imagecreatefrompng("imagem.png");
  imagepng($img);
  imagedestroy($img);
?>

Æ, se você quiser consultar os e-mails que foram visualizados a partir de uma data, poderia fazer um script com uma SQL tipo essa que, nei málið, busca todos os registros recentes de e-mail vistos a partir de 27 janúar 2013. Fica a dica

1
2
3
4
5
6
7
8
 
  SELECT * 
  FROM 
      `maladireta` 
  WHERE 
      contador > 0 AND 
      DATE(datahora_visualizado) >= DATE("2013-01-27")
;
Samtals aðgangur: 34899

8 umsagnir “PHP: Hlaupa handrit loading image fellt í tölvupósti

  1. Leandro Chaves sagði:

    Taylor,
    Não é uma boa prática colocar o email do usuário no link da imagem. O ideal é inserir os dados no banco na hora do envio e colocar um hash ou o id da tabela no link, para assim identificar quem abriu o e-mail.

    • Oi Leandro, obrigado pelo comentário. Isso é discutível. Pensando em Segurança da Informação você tem razão, mas na prática seria certo preciosismo, pois o link de e-mail (mynd) que você considera importante proteger estará disponível apenas na caixa de entrada do próprio destinatário. É o mesmo que esconder algo de mim que já sei! Ennfremur, você teria que manter no seu banco uma outra tabela com os milhares de registros da sua mala-direta, mesmo sem saber se os e-mails ali contidos são válidos. Aí se você quisesseenchugarseu banco, não poderia, pois por uma questão de integridade referencial entre as tabelas, seria obrigado a manter os registros, sob pena de nunca saber quem abriu o e-mail. Mas já que estamos falando de segurança, para evitar ter o e-mail interceptado por um Wireshark da vida, o que poderia ser feito é usar SSL (https ð) tanto no envio do e-mail, quanto no link da imagem. Mas gostei da sua proposta, vou publicar uma solução assim, unnið!

  2. Ola ,
    Estou querendo pegar o IP da pessoa que leu a mensagem , entretanto se for um cliente do hotmail por exemplo ele pega um IP com faixa de dominio nos EUA. Daí não me ajuda muito . Como faço para pegar o IP real da maquina dele ?

  3. Régis sagði:

    Estranho As vezes funciona e as vezes não funciona usando o Chrome, Opera e Fire Fox no gmail e hotmaillimpo o cache e cookies, mas as vezes não faz a gravação no BD se o email foi aberto ou não !!

  4. diego sagði:

    Galera..tenho um script de cadastro com nome..emailcpfrgqueria que depois que usuario cadastrar tudo e enviasse pro meu banco de dadosretorna algo pro email dele automatico..tipo
    EXEMPLO:”informações cadastrada com sucesso..aguarde nosso contato

    Teria como??

    • Opa, como disse no Post: “Til að þetta virki, viðtakandinn þarf endilega að vera stillt þannig að netfangið þitt er að lesa í HTML-sniði”. Por padrão o HTML é renderizado, mas mesmo o Gmail se mudar a renderização para TEXTO, daí não vai funcionar, pois ele vai simplesmente exibir as TAGs HTML como texto ao invés de renderizá-las.

Leyfi a Reply

Netfangið þitt verður ekki birt. Nauðsynlegir reitir eru merktir með *