phpmailer를 사용하여 이메일을 보낸 후 상대방이 이메일을 읽었는지 알고 싶어하는 사람들이 많이 있습니다. 일반적으로 우리는 이것을 알 수 없는데, 방법이 없을까요?
이 문제에 대한 간단한 해결책이 있습니다. 이메일 내용을 html 형식으로 보낼 수 있고 내용에 그림을 삽입할 수 있으므로 핵심은 그림에 있습니다.
이메일 내용이 다음과 같다고 가정해 보겠습니다.
content.php 파일 코드는 다음과 같습니다.
<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>
이 $bg는 어떻게 작성하나요? 이메일이 여러 사람에게 전송되면 어떻게 되나요? 여기서 어떻게 구별하나요?
링크가 다음과 같다고 가정해 보겠습니다. http://www.xxx.com/image.php?email=$email image.php 코드를 다시 살펴보세요
image.php 파일 코드는 다음과 같습니다.
<?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); ?>
이 내용을 보시면 이해가 되실 겁니다. 그래서 제가 보낸 이메일의 내용은 이렇습니다.
<?php ob_start(); include_once("content.php"); $content=ob_get_contents(); ob_end_clean(); ?>
왜 루프를 통해 하나씩 보내야 하나요? 어떤 연락처가 이메일을 읽었는지 구분하기 위해 각 이메일 내용의 배경 이미지가 다르게 표시되기 때문입니다. 보내기 전에 콘텐츠를 처리하고 배경을 교체하여 우리가 보는 이메일 콘텐츠의 배경 이미지 src가 다음과 같이 됩니다.
<?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(); } ?>
여기서 또 다른 문제가 있다는 점에 유의하세요. 위의 코드를 실행하면 첫 번째 사람에게 보낸 이메일이 3개, 두 번째 사람에게 보낸 이메일이 2개, 세 번째 사람에게 보낸 이메일이 1개 있습니다. 왜? 여기서 AddAddress 메소드를 살펴보겠습니다. 수정 방법은 다음과 같습니다. class.phpmailer.php를 열고 310행을 찾아 private $to=Array()를 public $to=Array()로 변경합니다.
그런 다음 이메일을 보내는 코드를 추가하세요.
이 글을 쓰다 보면 길게 설명할 필요가 없습니다.