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
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='yes' where email='$email'"); } 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['SERVER_NAME']}/image.php?email=$email"; $str=str_replace('background=""',"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!