跟踪像素和 Gmail 代理的问题

Problems with tracking pixels and Gmail proxy

我正在尝试为从 wordpress 发出的电子邮件实施自定义跟踪像素。

感谢这些 post:

Tracking email with PHP and image

Tracking email opens with a real image

尤其是

http://www.phpdevtips.com/2013/06/email-open-tracking-with-php-and-mysql/

我能够实现核心思想。

电子邮件加载跟踪像素通过 <img src="https://www.example.com/tracking.php?order_id=1" width="100" height="100" />

并在 tracking.php

$graphic_http =  'https://www.example.com/GIF-example.gif';

header('Content-Type: image/gif');
readfile( $graphic_http );

在浏览器中打开 tracking.php 文件会打开 gif 图像以供下载。

但是,跟踪 pixel/Tracking 图片不会显示在 Gmail 电子邮件中。只有损坏的图像徽标,当我单击以显示图像时,此 link 已打开

https://ci5.googleusercontent.com/proxy/l2xUKFGnNFKm64zEYmJhOcUmEJm15w9MC1txRRF01tpKlcL3t3O16aMJgbYQkucBySV0xV2T0EsCwikOAC0Z4em6uPzSs38lkHrYBvosRRAk14EfPoEXqC5JdLxRm8ToZmGSQqt_RwHCaBE_3uLgQDVEB05Rdtkq-Xzuw30=s0-d-e1-ft#https://www.example.com/tracking.php?order_id=1

表示 Google 404:

Google 404. 错误

在此服务器上找不到请求的 URL /proxy/l2xUKFGnNFKm64zEYmJhOcUmEJm15w9MC1txRRF01tpKlcL3t3O16aMJgbYQkucBySV0xV2T0EsCwikOAC0Z4em6uPzSs38lkHrYBvosRRAk14EfPoEXqC5JdLxRm8ToZmGSQqt_RwHCaBE_3uLgQDVEB05Rdtkq-Xzuw30=s0-d-e1-ft。我们知道的就这些。

Google 的代理无法读取 php 脚本似乎是个问题。 tracking.php 和 GIF-example.gif 文件都拥有 775 权利并且可以公开访问。

在 Hotmail 上这确实有效,所以这似乎确实是 Google 代理的问题。

有人知道如何让 Google 代理访问这个跟踪像素吗?

你所有的 header 都在试图强制浏览器下载文件并忽略它的文件类型(因为你从不说它是什么文件类型)。要在浏览器中显示图像,您需要设置正确的 header。

这基本上就是您需要做的所有事情:

$orderId = isset($_GET['order_id']) ? $_GET['order_id'] : null;

if ($orderId) {
    // Save stuff in your DB or how you want to log it.
}

header('Content-Type: image/gif');
echo file_get_contents('/absolute/path/to/image.gif');
exit; // Not really necessary, but just to make sure there's no more output.

我找到了答案:问题出在 Google 代理和问号上?在 https://www.example.com/tracking.php?order_id=1

Google 代理地址搞砸了,因为它已经有一个问号并导致 404。

我使用 https://www.example.com/tracking.php/order_id=1 解决了它,然后在 tracking.php 上我没有使用 $_GET$_SERVER['REQUEST_URI'] 并解析了 /order_id= 字符串。

跟踪像素显示在 Gmail 中,并在 tracking.php 脚本中进行跟踪。