関数 current_microsecond() {
list($usec, $sec) = explode (" ", microtime());
,2); }//乱数を取得します 関数ランダム() { $tmp
= rand
(0
, 1)? '-':'' ; ランド(1000、9999)ランド
(1000) 、 9999). ランド(100,999).ランド (100,) 999 );}
// 擬似 GUID を生成します
//3 つのセグメント: 1 つはアドレス、1 つはマイクロ秒、1 つは乱数です
functionget_unique_id($ip) {
$ raw = strtoupper(md5($ip.'-) ' .current_microsecond()。 ' -'.random()));
return substr($raw,) 0、8 ) .'-'.substr($raw,8,4) '- - ' .substr ( $raw,16,4).'-'.substr ( $生, 20 );}
blank.phpはメール本文のTracking Imageによって呼び出され、メールが読まれたことをユーザーに通知するメールを送信し、画像を生成します。
![PHPメール追跡システム](http://img.tuwenba.com/get/http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
blank.php
if(!($unique_id = trim($_SERVER[ 「QUERY_STRING」] ))) exit_with_image_blank();
$db=get_db();
$tracker =$db ->fetch_one( "SELECT * FROM `email_tracker` WHERE unique_id='$unique_id'");
// レコードが存在しないか、追跡が終了しました
if (空($tracker) && $tracker['回' ] >= $ tracker ['number']) {
// 空白の画像を出力して終了
exit_with_image_blank();
}
// メールが送信されてからの経過時間
$time_elapsed =time() - $トラッカー[ 'sent_time'];
// 1分未満
if($time_elapsed 60) {
if($tracker['回'] 0) { // メールトラッカーがインストールされていませんまだ有効化されています
"); } exit_with_image_blank ();} //1分経過後、times if
(
$tracker
['回 '
] 0) { $one_分前 = 時間() -
60; // 1分後にアクティブ化されていないすべてのメールトラッカーを削除します $db ->
クエリ("DELETE FROM `email_tracker` WHERE 回 $one_ minutes_ago
");//unique_id='$unique_id' exit_with_image_blank(); }
//受信者IPを取得します
$rcpt_ip = $_SERVER['REMOTE _アドレス']? $ _SERVER['REMOTE_ADDR']:'127.0.0.1';
if ($rcpt_ip = = $tracker['ip']) {
// ユーザーがメールを開いた可能性があります
$ tracker['times']++;
} else {
//が受信者ですメールを開いた後の番号は、再生回数が 1 つ増加しました
$tracker['回']++;
}
$db -> query(" UPDATE `email_tracker` SET 回=$tracker[回] WHERE unique_id='$unique_id'");
if (( $tracker[ '回'] >= $tracker['番号] '
]) { // 追跡は終了しました。レコードを削除します
$db->query("DELETE FROM `email_tracker` WHERE unique_id='$unique_id ' "
);🎜}
// 送信Email
send_mail('mailtracker0@gmail.com', $tracker [「メール」」 ], array(
'件名' =>'あなたのeメール「'.$tracker」 ['タイトル'].'」を読みました!',
' 本体' => notify_content($tracker, $rcpt_ip, $time_elapsed),
'ヘッダー' => "MIME-Version: 1.0;rnContent-type:text/html; charset="utf-8";rn" 、
'ホスト' =>'smtp.gmail.com',
'ssl' = >true、
'ポート' =>465,
'認証' => true、
'user' =>'mailtracker0' 、
空の画像を出力して終了します exit_with_image_blank();
send_mail 関数は通知メールの送信に使用されます:
![PHPメール追跡システム](http://img.tuwenba.com/get/http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
send_mail
/*
* パラメーター:
* 必須の送信者のメールアドレス
* 受信者は必須 受信者のメールアドレス、複数のメールがある場合は、「,」で区切るか、配列を渡します
* params オプション その他のオプションのパラメーター 配列
* ----subject メールの件名
* ----body メール本文
* ----ヘッダー
* ----host メールの送信に使用される SMTP ホスト
* ----port ポート
* ----timeout タイムアウト時間
* ----ssl は SSL 暗号化、デフォルトは false
* ----auth 認証が必要かどうか、デフォルトは false
* ----user 認証に使用されるユーザー名
* ----pass 認証用パスワード
**/
function send_mail($from,$recipients , $params = array()) {
if(空($from) || 空 ($受信者) ) || !is_array($params)) return 'paramsエラー ';
定義 ('crlf' ''、 "rn"); =
10; $auth =
false; $s sl $件名 =
' 無題 '; foreach ($params AS $key => $value) {
$$key = $value;
}
if(!is_array($受信者)) $re受信者 = 爆発 (',', トリム($受信者));
if()
!is_array($headers )) $headers = explode(CRLF, トリム($headえー));
if( !is_string($body)) $body = '';
$body = str_replace (CRLF . '.', CRLF . '...' , $body{ 0}=='.'?':。 $body ); // SMTPサーバーに接続します
($ssl?
'
ssl: //
'
.
$host
:
$ホスト
、
$port
,
$errno
,
$errstr
,
$timeout
);
if(!は_リソース ($connection)) return
'サーバーへの接続に失敗しました )gets($connection, 1024))
if
(
$line
{
3
}
== '= ') Bread; //
コマンドを保存 $ datas
= 配列( ); if
(
$auth === true) { // 本人確認が必要です $ データ
[] = array('EHLO '.$host. CRLF、' 250 ','EHLO コマンドが失敗しました。出力: '); array
(' 認証ログイン'。 CRLF ,'334','AUTH コマンドが失敗しました。出力: '); $データ[] = array(
base64_encode
(
$user
)
.
CRLF
,
'
334
「
、
」
AUTH コマンドが失敗しました。出力:
'
);
$datas[] = array(base64_encode($pass).CRLF 、 '235 ', 'AUTH コマンドが失敗しました、 出力: ');
} else {
$datas[] = 配列('HELO '.$host.CRLF, '250 '、 'こんにちはコマンドが失敗しました。出力: ');
}
// 送信者を設定します
$datas[] = array( ')
メール送信者: '. $from.'>'.CRLF, '250', 'MAIL FROM エラー、出力: ');
// 受信者を設定
AS $value) { $datas[] =
配列('RCPT TO: '
.
$value
.
'>' .CRLF 、' 250', 'RCPT TO エラー、出力: ' ); }
$datas[] = array('DATA'.CRLF 、 '354' , 'DATA コマンドが失敗しました。出力: ');
// 邮件ヘッダー
$datas[] = 'From: '.$from.CRLF ;
$datas[] = '件名: '.$subject.CRLF;
foreach($headers AS $value) {
$datas[] = $value