SwiftMailer を使用して、自分の Web サイトに登録されている人にメールを送信しています。開封とクリックスルーを追跡したいのですが、開封が完全に機能しています。クリックスルーはほとんどありません...
メールを開くと、PHP スクリプトをロードする 1px x 1px に設定された画像が使用されます。これは、その人の電子メール アドレスを追跡し、私の MySql データベースでその電子メール アドレスを開いた回数を記録します。電子メール内のすべてのリンクは、最初に、GET 要求を使用して電子メール アドレスとリンクが含まれている電子メールを読み取るサイトのスクリプトにユーザーを誘導します。このスクリプトは、この情報を DB に記録します。
問題は、メール内のリンクをクリックすると、最初のクリックが正常に記録されることです。また、ユーザーがクリックしたリンクはすべて記録されますが、同じソースからの各クリックは 1 回しか記録されません。
IE: 各電子メールのフッターには、Facebook で会社を高く評価するためのリンクと、Twitter への別のリンクがあります。FB をクリックすると、DB が更新され、1 つのリンクをクリックしたことが示されます。FBをもう一度クリックしても更新されません。しかし、Twitter をクリックすると、2 つのリンクをクリックしたと表示されます。
スクリプトをブラウザに直接ロードすると、各クリックが適切に追跡されます。
編集:
URL 構造:https://<my website>.com/emails.php?type=click&email=<id of email>&address=<user email>&url=<link to click on>
PHP:
if($_GET['type'] == 'click') {
$email = $_GET['email'];
$address = $_GET['address'];
$url = $_GET['url'];
// Get Worker Email
$sql = mysqli_query($con, "SELECT * FROM worker_emails WHERE id='$email'");
$row = mysqli_fetch_array($sql);
// Unserialize Array
$array = unserialize($row['clicks']);
// Update Array
$array[''.$address.'']['Clicks'] = $array[''.$address.'']['Clicks'] + 1;
// Serialize Array
$array = serialize($array);
// Update Click Tracking
mysqli_query($con, "UPDATE worker_emails SET clicks='$array' WHERE id='$email'");
// Send User to Link
header("Location: ".$url);
}
提案?