0

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);
}

提案?

4

0 に答える 0