Maison >développement back-end >tutoriel php >Exemple détaillé de la façon dont PHP détermine si le destinataire a lu l'e-mail

Exemple détaillé de la façon dont PHP détermine si le destinataire a lu l'e-mail

伊谢尔伦
伊谢尔伦original
2017-06-27 10:45:551521parcourir

Après avoir utilisé phpmailer pour envoyer des emails, beaucoup de gens veulent savoir si l'autre partie a lu l'e-mail ? D’une manière générale, nous ne pouvons pas le savoir, alors y a-t-il un moyen ?

Il existe une solution simple à ce problème. Nous savons que le contenu de l'e-mail peut être envoyé au format HTML, et nous pouvons insérer des images dans le contenu, donc la clé réside dans l'image.

Supposons que le contenu de notre email ressemble à ceci :

Le code du fichier content.php est le suivant :

<table width="555" height="50" border="0" align="center" cellpadding="0" cellspacing="0" background="<?=$bg?>">
<tr>
 <td>这是测试内容</td>
   </tr>
   <tr>
 <td> </td>
   </tr>
   <tr>
 <td> </td>
   </tr>
 </table>

Comment écrire ce $bg ? Que se passe-t-il si l'e-mail est envoyé à plusieurs personnes ? Comment distinguer ici ?

Supposons que le lien ressemble à ceci : http://www.xxx.com/image.php?email=$email Regardez à nouveau le code de image.php

Le code du fichier image.php est le suivant :

<?php 
$email=$_GET["email"]; 
if($id) 
{ 
  include_once("/conn.php"); 
  mysql_query("update mail_list set has_read=&#39;yes&#39; where email=&#39;$email&#39;"); 
} 
header("Content/type:image/gif"); 
$im=imagecreatefromgif("bg.gif"); 
imagegif($im); 
imagedestroy($im); 
?>

Vous comprendrez peut-être après avoir vu ceci. Le contenu de l'e-mail que j'ai envoyé est donc le suivant :

<?php 
ob_start(); 
include_once("content.php"); 
$content=ob_get_contents(); 
ob_end_clean(); 
?>

À ce stade, nous n'avons pas remplacé l'image de fond dans le contenu de l'e-mail. Les prochaines questions seront progressivement adressées. résoudre ce problème, cela fait partie du code pour envoyer des emails en utilisant phpmail :

<?php 
/* 
$contact=array("userA"=>"aaaa@sina.com","userB""=>"bbb@163.com","userC"=>"ccc@qq.com"); 
*/ 
foreach ($contact as $unm=>$email) 
{ 
  $bg_file="http://{$_SERVER[&#39;SERVER_NAME&#39;]}/image.php?email=$email"; 
  $str=str_replace(&#39;background=""&#39;,"background=\"$bg_file\"",$content); 
  $mail->MsgHTML($str); 
  $mail->AddAddress($email,$unm); 
  $mail->Send(); 
} 
?>

Pourquoi devons-nous les envoyer un par un en boucle ici ? Car afin de distinguer quel contact a lu l’email, l’image de fond du contenu de chaque email s’affiche différemment. Avant l'envoi, nous traitons le contenu et remplaçons l'arrière-plan, de sorte que le src de l'image d'arrière-plan du contenu de l'e-mail que nous voyons ressemble à ceci : http://www.domain.com/image.php email=aaa? @sina.comAttendez.

Notez qu'il y a un autre problème ici. Après avoir exécuté le code ci-dessus, vous découvrirez un problème. Il y a 3 e-mails envoyés à la première personne, 2 e-mails à la deuxième personne et 1 à la troisième personne. .Feng, pourquoi est-ce ici ? Jetons un coup d'œil à la méthode AddAddress ici. La méthode de modification est la suivante : ouvrez class.phpmailer.php, recherchez la ligne 310, remplacez private $to=Array() par public $to=Array().

Envoyez ensuite l'e-mail Ajouter au code :

$mail->to=Array();
$mail->AddAddress($email,$unm);

À ce stade, il n'est pas nécessaire de trop expliquer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn