PHP: Проверьте, кто прочитал отправленное письмо?

Я отправляю электронную почту некоторым пользователям и хочу знать, кто ее прочитал, означает, что если кто-то прочитал это письмо, тогда будет храниться файл журнала, который содержит адрес электронной почты этого пользователя с датой / временем / IP. Для этого я отправляю функцию javascript с адресом электронной почты (html-шаблон), который просто предупреждает адрес электронной почты пользователя, когда пользователь открывает этот адрес электронной почты следующим образом:

for($n=0; $n<sizeof($checkBox); $n++){ $mail = new PHPMailer(); $mail->IsHTML(true); $mail->Subject = $subject; $function = "<script language='javascript'>function stats(emailId){alert(emailId);}</script>"; $bodyOpen = "<body onload='stats(".$checkBox[$n].");'>"; $msg_body .= $body .= "<table><tr><td>Hello Everyone</td></tr></table></body>"; $mail->Body = $function.$bodyOpen.$msg_body; $mail->WordWrap = 50; $mail->FromName = 'Muhammad Sajid'; $mail->IsMAIL(); $mail->From = 'webspot49@gmail.com'; $mail->AddAddress($checkBox[$n]); $sent = $mail->Send(); } 

html-шаблон работает отлично и показывает всплывающее окно предупреждения при загрузке страницы, но оно не работает, если я использую для отправки этого html-шаблона.

И я только хочу решить эту проблему с помощью PHP5.xx / javascript, другого программного обеспечения или стороннего инструмента. Любая помощь..?

Добавить заголовок для отправки по электронной почте:

 Disposition-Notification-To: you@yourdomain.com 

Как уже упоминалось выше, он не является надежным, и лучше сделать что-то вроде этого:

 <img src="http://yourdomain.com/emailreceipt.php?receipt=<email of receiver>" /> 

И зарегистрируйте его в базе данных, хотя снова это ограничивается способностью почтового клиента показывать изображения, а иногда даже может помещать почту в мусор, поскольку она не обнаруживает изображение … обходной путь, который должен был бы фактически выводить изображение (скажем, ваш логотип) в конце этого скрипта.

Изменить: быстрый поиск в классе phpmailer дал мне следующее:

 $mail->ConfirmReadingTo = 'yourown@emailaddress.com'; 

но это то же самое, что и метод Disposition-Notification-To выше.

Отправить изображение маяка в письмах

 <img src='http://www.yourserver.com/beacon.php?email_id=$email_id&email_address=$user_address' style='width:1px;height:1px'> 

А затем используйте файл beacon.php для регистрации данных. Затем вы захотите вывести изображение 1X1 с соответствующими заголовками.

Важная заметка
Многие популярные почтовые клиенты (такие как Gmail) теперь блокируют внешние изображения, поэтому это далеко не доказательство.

Это практически невозможно сделать на 100% эффективно.

  1. Вы можете контролировать, где хранится контент, например http://www.example.com/34hg038g85gb8no84g5, и предоставить ссылку в электронном письме на этот контент, затем вы сможете определить, когда этот URL был просмотрен.

  2. Используйте метод, используемый MailChimp и другими кампаниями рассылки новостей, поместите невидимое изображение в свой адрес электронной почты, это изображение должно находиться на сервере, которым вы управляете, затем вы можете обнаружить, когда это изображение попадает, когда пользователь открывает письмо.

Это невозможно по определению.

Почтовые программы не являются браузерами, они не поддерживают javascript. Они даже не поддерживают правильный CSS, поэтому не ожидайте слишком многого. Поэтому я честно не вижу, как вы можете делать то, что вы пытаетесь сделать

Я просто добавляю одну строку:

 $dt = date('F \ jS\,\ Y h:i:s a'); for($n=0; $n<sizeof($checkBox); $n++){ $mail = new PHPMailer(); $mail->IsHTML(true); $mail->Subject = $subject; $src = "<img src='msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />"; $msg_body .= $src .= "<table><tr><td>Hello Everyone</td></tr></table>"; $mail->Body = $function.$bodyOpen.$msg_body; $mail->WordWrap = 50; $mail->FromName = 'Muhammad Sajid'; $mail->IsMAIL(); $mail->From = 'webspot49@gmail.com'; $mail->AddAddress($checkBox[$n]); $sent = $mail->Send(); } 

и в файле readmail.php просто добавьте дату / время и userid с проверкой (если не существует с прикрепленной датой / временем) и исправил ее только для Gmail, hotmail, но не для Yahoo … Может ли кто-то помочь также исправить для Yahoo ….?

Haaaa. глупая ошибка, просто используйте полный URL-адрес:

 $src = "<img src='http://www.msajid.isgreat.org/readmail.php?dt=".$dt."&eid=".$checkBox[$n]."' />"; 

и он также будет работать на Yahoo ….

Я знаю, что это старый поток, но я просто должен был ответить … тем, кто должен это учитывать, я предлагаю, чтобы мы поставили себя на место людей, которые должны написать антиспамовое программное обеспечение, чтобы помешать нашим усилиям. Обнаружение? или .php (или другой скрипт / двоичное расширение) внутри тега изображения будет для меня тривиальным, как постулируемый программист «спам-убийца» … так же, как идентификация изображения 1×1 будет …

Я провел 2,5 года в качестве Национального цифрового директора для президентской кампании, которая собрала 20 миллионов долларов, прежде чем у нас даже появился кандидат – вот что я разработал для этой кампании:

  1. Во время отправки (или раньше) создайте хэш на адресе TO: email и сохраните его в db рядом с адресом электронной почты.

  2. Используйте хеш, который мы только что создали, чтобы изменить небольшой, но явно видимый логотип в письме и сделать копию логотипа с хешем в имени файла логотипа, например: emxlogox.0FAE7E6.png – ссылаться на это уникальное изображение в электронном письме для логотип – сделайте копию логотипа с именем хэша в имени файла. Эта конкретная серия логотипов появляется только в адресных массовых электронных сообщениях. Предупредить членов экипажа не копировать его для других целей (или переименовать его, если они это сделают). Первая часть имени файла должна быть чем-то, что не будет отображаться в журналах в других контекстах, чтобы ускорить ваш синтаксический анализ и код, который вы должны создать, чтобы отсортировать ложные удары.

  3. Разбирайте журналы для появления запрошенных логотипов и извлекайте хэш из имени файла, чтобы он соответствовал одному адресу электронной почты. И ваша программа синтаксического анализа также может получить IP-адрес и время, необходимое для их получения и открытия электронной почты, чтобы вы могли идентифицировать высокочувствительных получателей и тех, кто взял неделю, чтобы открыть письмо. Сделайте гео-поиск на IP-адресе и посмотрите, совпадете ли вы с местоположением, которое у вас уже есть, и / или начните запись их шаблонов путешествий (или шаблонов использования прокси). Geo deltas также может идентифицировать электронную почту вперед.

Конечно же, этот хэш используется для записи кликов, а также для первого и второго опций. (Теперь у вас есть «досье» нескольких опций для ответов на эти отчеты о злоупотреблениях, и вы также защищаете свою репутацию по электронной почте).

Этот метод также можно использовать для определения того, кто отправляет электронные письма своим друзьям, и вы просите этих «хороших экспедиторов» присоединиться к какой-то элитной команде добровольцев, предлагая им скидки или вознаграждения или что-то подходящее для вашего бизнеса / проекта … в сущность, тот же хеш также становится ссылочным кодом.

Вы также можете попросить их щелкнуть правой кнопкой мыши по логотипу в электронном письме и сохранить его, не изменяя имя файла, а затем отправить его в «везде» (изображение должно иметь незаметную, понятную, содержательную ссылку на нее, а не нечитаемую bit.ly короткая ссылка). Затем вы можете использовать API поиска Google, чтобы определить, кто вам помог, и поблагодарить их или дать им награды … Для этого помогает, если первая часть вашего имени файла логотипа действительно уникальна, например unsportingly.unique.emxlogox .0FAE7E6.png, поэтому вам не нужно делать миллионы запросов API поиска Google – просто выполните поиск по уникальной первой части имени файла – и посмотрите на хеши после получения хитов.

Вы храните ссылки, где их копия логотипа появилась в вашем db, чтобы добавить к вашему досье, где в сети они активны и вам помогли.

Да, это медленный и обременительный, но в наши дни, когда мы говорим, что хотим развивать «отношения» с нашим списком адресов электронной почты, это то, что вам нужно сделать, чтобы дать индивидуальное лечение; идентифицировать и вознаграждать своих друзей. И да, вы получаете миллионы этих хэшированных изображений файлов в одном каталоге, но хранилище дешево, и это стоит того, чтобы действительно иметь эти отношения с вашими взглядами.

Вы не можете добавить javascript в свои электронные письма.
Единственное решение – иметь только ссылку в письме и сообщение на сервере. Тогда вы могли бы знать, что само сообщение было просмотрено.

Внедрение пользовательского изображения (1px blank может быть хорошим) в электронном письме и запись, является ли оно горячим или нет, это справедливое решение. Но проблема Gmail как клиента блокирует внешние изображения по умолчанию.

Пожалуйста, обратитесь к RFC-3798 за более подробной информацией о MDN.

Поскольку последнее сообщение было некоторое время назад, я не уверен, работает ли этот метод.

Я протестировал этот метод на сервере под управлением PHP 5.4.30, и он, похоже, не выводит изображение.

Это очень простой код:

 <img src="http://theservername.com/myaccount_email_read_offline.php"> 

Обратите внимание, что я удалил запрос и любой дополнительный код из этого изображения.

Открыв эту отдельную страницу, myaccount_email_read_offline.php отобразил изображение.

Однако попытка включить изображение, включив в него файл PHP, не сработала.

Хотя я не понял, почему простой PHP-файл не генерировал включенное изображение (как упоминалось в моем сообщении 6 часов назад), вот еще один очень сложный способ создания файла изображения, который не был отклонен моим собственным PHP 5.4.30 веб-сервер.

Вот код, который я поместил в файл index.php в подкаталоге / email_image /:

 <?php $message_id = $_REQUEST['message_id']; $graphic_http = 'http://mywebsite.com/email_image/message_open_tracking.gif'; $filesize = filesize( 'message_open_tracking.gif' ); header( 'Pragma: public' ); header( 'Expires: 0' ); header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' ); header( 'Cache-Control: private',false ); header( 'Content-Disposition: attachment; filename="a_unique_image_name_' . $message_id . '.gif"' ); header( 'Content-Transfer-Encoding: binary' ); header( 'Content-Length: '.$filesize ); readfile( $graphic_http ); exit; ?> 

Для имени файла изображения я использовал следующее:

 http://mywebsite.com/email_image/?message_id=12345 

В папке email_image также пустое изображение 1×1 gif с именем «message_open_tracking.gif».

Файл index.php также можно пересмотреть, чтобы использовать message_id, чтобы отметить это сообщение как прочитанное. Если другие переменные включены в очередь, такие как адрес электронной почты получателя, эти значения также могут использоваться в этом файле index.php.

Большое спасибо Беннетт Стоун за следующую статью: http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/